如何在ConnectionString中引用Docker容器

如何在ConnectionString中引用Docker容器,docker,docker-machine,Docker,Docker Machine,我有两个docker映像,一个用于后端,另一个用于模拟数据库。我想分别旋转这两个图像,并将后端链接到数据库。为此,我在后端有一个连接字符串,如sodatasource=192.168.99.100;目录=数据库名称;综合安全=真实;MultipleActiveResultSets=True";where192.168.99.100是运行数据库容器的默认Docker机器的IP。因此,在我的Windows机器上,这一点非常有效,后端容器可以与另一个容器上运行的数据库通信。然而,当我的一些使用Mac和

我有两个docker映像,一个用于后端,另一个用于模拟数据库。我想分别旋转这两个图像,并将后端链接到数据库。为此,我在后端有一个连接字符串,如so
datasource=192.168.99.100;目录=数据库名称;综合安全=真实;MultipleActiveResultSets=True";
where
192.168.99.100
是运行数据库容器的默认Docker机器的IP。因此,在我的Windows机器上,这一点非常有效,后端容器可以与另一个容器上运行的数据库通信。然而,当我的一些使用Mac和Linux的同事使用相同的映像时,他们无法获得链接,因为他们的Docker机器显然没有相同的IP


有没有办法在连接字符串中引用数据库,使其无论在何处运行都是相同的?例如,使用数据库容器的名称,而不是IP或类似的名称?

您可以使用
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
配置选项的更多信息您可以使用
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的更多信息配置选项

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

例如:

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


进一步阅读:

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

例如:

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

进一步阅读: