我在docker-compose.yml中定义了postgres服务器:
db:
image: postgres:9.5
expose:
- 5432
然后在另一个docker容器中,我尝试连接到该postgres容器.但是它给出了警告错误:
Is the server running on host "db" (172.22.0.2) and accepting
data-service_1 | TCP/IP connections on port 5432?
为什么容器无法通过提供的信息(host =“ db”和port = 5432)连接到另一个容器?
聚苯乙烯
完整的docker-compose.yml:
version: "2"
services:
data-service:
build: .
depends_on:
- db
ports:
- "50051:50051"
db:
image: postgres:9.5
depends_on:
- data-volume
environment:
- POSTGRES_USER=cobrain
- POSTGRES_PASSWORD=a
- POSTGRES_DB=datasets
ports:
- "8000:5432"
expose:
- 5432
volumes_from:
- data-volume
# - container:postgres9.5-data
restart: always
data-volume:
image: busyBox
command: echo "I'm data container"
volumes:
- /var/lib/postgresql/data
最佳答案
解决方案#1.相同的文件.
原文链接:https://www.f2er.com/docker/532725.html为了能够访问db容器,您必须在docker-compose.yml上下文中定义其他容器.启动容器时,每个容器都会将所有其他容器映射到/ etc / hosts中.
做就是了
version: '2'
services:
web:
image: your/image
db:
image: postgres:9.5
如果您不希望将其他容器放入相同的docker-compose.yml中,则还有其他解决方案:
解决方案2.知识产权
Docker是否检查<您的数据库容器的名称>并在结果列表中查找IPAddress指令.使用该IPAddress作为连接主机.
解决方案#3.网路
使您的容器加入同一网络.为此,在每个服务下,定义:
services:
db:
networks:
- myNetwork
不要忘记为您启动的每个容器更改db.
在开发过程中,我通常会选择第一个解决方案.我使用apache PHP作为一个容器,使用pgsql作为另一个容器,每个项目都有一个单独的数据库.我不会启动多个docker-compose.yml设置,因此在这种情况下,在一个.yml配置中定义两个容器是完美的.