如何在ConnectionString中引用Docker容器

问题描述 投票:0回答:2

我有2个docker映像,一个用于后端,一个用于模拟数据库。我想分别旋转这两个图像并将后端链接到数据库。为此,我在后端有一个连接字符串,例如Data Source=192.168.99.100;Catalog=DB name;Integrated Security=True;MultipleActiveResultSets=True";,其中192.168.99.100是运行数据库容器的默认Docker机器的IP。因此,在我的Windows机器上,它可以完美地工作,并且后端容器可以与在另一个容器上运行的数据库进行通信。但是,当我的一些使用Mac和Linux的同事使用相同的映像时,由于他们的Docker机器显然没有相同的IP,他们无法使用该链接。

是否有任何方法可以在连接字符串中引用数据库,因此无论它在何处运行,它都是相同的?例如,使用数据库容器的名称而不是IP或类似名称?

docker docker-machine
2个回答
0
投票

您可以使用docker-compose服务来实现您想要的。这是一个简化的示例docker-compose.yml文件:

version: "3.5"
services:
  db:
    container_name: mock_db
    restart: "no"
    build: ./mock_db
    expose:
      - 5432 (or whatever your port is)
    env_file: .env
    command: your-command

  server:
    container_name: my_server
    build: ./server
    env_file: .env
    ports:
      - "8443:8443"
    command: your-command

然后您可以将服务名称(在这种情况下为db)作为连接字符串的ip / url部分引用。

您可以阅读有关docker-compose配置选项here的更多信息


0
投票

您也可以使用普通泊坞窗来执行此操作。基本上,您只需要创建一个桥接网络,然后将两个容器都连接到它。

例如:

docker network create --driver=bridge mynetwork
docker run --network=mynetwork --name mydb mydb:latest
docker run --network=mynetwork --name myapp myapp:latest

然后在myapp容器内,您可以使用主机名mydb引用数据库容器(与docker-compose相同)。您仍然可以使用myapp等将-p 3000:3000容器中的端口公开给主机。

进一步阅读:https://docs.docker.com/network/bridge/

© www.soinside.com 2019 - 2024. All rights reserved.