我在postgres
中定义docker-compose.yml
服务器:
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
)连接到另一个?
PS
完整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
答案 0 :(得分:3)
解决方案#1。相同的文件。
为了能够访问db
容器,您必须在docker-compose.yml
的上下文中定义其他容器。启动容器时,每个容器都会获取/etc/hosts
中映射的所有其他容器。
只做
version: '2'
services:
web:
image: your/image
db:
image: postgres:9.5
如果您不希望将其他容器放在同一个docker-compose.yml
中,还有其他解决方案:
解决方案#2。 IP 强>
执行docker inspect <name of your db container>
并在结果列表中查找IPAddress
指令。使用IPAddress
作为主机进行连接。
解决方案#3。网络强>
让您的容器加入同一网络。为此,在每项服务下,定义:
services:
db:
networks:
- myNetwork
不要忘记为您正在开始的每个容器更改db
。
我通常在开发过程中使用第一个解决方案。我使用apache+php
作为一个容器,pgsql
作为另一个容器,每个项目使用一个单独的DB。我没有启动docker-compose.yml
的多个设置,因此在这种情况下,在一个.yml
配置中定义两个容器是完美的。
答案 1 :(得分:0)
取决于是不正确的。我会尝试使用其他参数,如LINKS和环境:
version: "2"
services:
data-service:
build: .
links:
- db
ports:
- "50051:50051"
volumes_from: ["db"]
environment:
DATABASE_HOST: db
db:
image: postgres:9.5
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
这个适用于我(不是postgres而是mysql)