docker-无法连接到postgres容器

前端之家收集整理的这篇文章主要介绍了docker-无法连接到postgres容器 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我在docker-compose.yml中定义了postgres服务器:

  1. db:
  2. image: postgres:9.5
  3. expose:
  4. - 5432

然后在另一个docker容器中,我尝试连接到该postgres容器.但是它给出了警告错误

  1. Is the server running on host "db" (172.22.0.2) and accepting
  2. data-service_1 | TCP/IP connections on port 5432?

为什么容器无法通过提供的信息(host =“ db”和port = 5432)连接到另一个容器?

聚苯乙烯
完整的docker-compose.yml:

  1. version: "2"
  2. services:
  3. data-service:
  4. build: .
  5. depends_on:
  6. - db
  7. ports:
  8. - "50051:50051"
  9. db:
  10. image: postgres:9.5
  11. depends_on:
  12. - data-volume
  13. environment:
  14. - POSTGRES_USER=cobrain
  15. - POSTGRES_PASSWORD=a
  16. - POSTGRES_DB=datasets
  17. ports:
  18. - "8000:5432"
  19. expose:
  20. - 5432
  21. volumes_from:
  22. - data-volume
  23. # - container:postgres9.5-data
  24. restart: always
  25. data-volume:
  26. image: busyBox
  27. command: echo "I'm data container"
  28. volumes:
  29. - /var/lib/postgresql/data
最佳答案
解决方案#1.相同的文件.

为了能够访问db容器,您必须在docker-compose.yml上下文中定义其他容器.启动容器时,每个容器都会将所有其他容器映射到/ etc / hosts中.

做就是了

  1. version: '2'
  2. services:
  3. web:
  4. image: your/image
  5. db:
  6. image: postgres:9.5

如果您不希望将其他容器放入相同的docker-compose.yml中,则还有其他解决方案:

解决方案2.知识产权

Docker是否检查<您的数据库容器的名称>并在结果列表中查找IPAddress指令.使用该IPAddress作为连接主机.

解决方案#3.网路

使您的容器加入同一网络.为此,在每个服务下,定义:

  1. services:
  2. db:
  3. networks:
  4. - myNetwork

不要忘记为您启动的每个容器更改db.

在开发过程中,我通常会选择第一个解决方案.我使用apache PHP作为一个容器,使用pgsql作为另一个容器,每个项目都有一个单独的数据库.我不会启动多个docker-compose.yml设置,因此在这种情况下,在一个.yml配置中定义两个容器是完美的.

猜你在找的Docker相关文章