我有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或类似的东西?
发布于 2020-01-30 04:49:13
你也可以使用普通的docker来做这件事。基本上,您只需要创建一个桥接网络,然后将两个容器都连接到它。
例如:
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相同)。您仍然可以使用-p 3000:3000等将myapp容器中的端口公开给主机
发布于 2020-01-30 04:29:10
您可以使用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的更多信息
https://stackoverflow.com/questions/59974758
复制相似问题