我有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-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的更多信息
您也可以使用普通泊坞窗来执行此操作。基本上,您只需要创建一个桥接网络,然后将两个容器都连接到它。
例如:
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
容器中的端口公开给主机。