Docker公开容器之间的端口

巴蒂斯特

我想要一个可与Postgresql数据库(psycopg2)一起运行的python flask应用程序。所以我做了这个docker-compose文件:

version: "3"
services:
  web:
    depends_on:
      - database
    container_name: web
    build:
      context: "."
      dockerfile: "docker/Dockerfile.web"
    ports:
      - 5000:5000
    volumes:
      - database:/var/run/postgresql
  database:
    container_name: database
    environment:
      POSTGRES_PASSWORD: "password"
      POSTGRES_USER: "user"
      POSTGRES_DB: "products"
    image: postgres
    expose:
    - 5432
    volumes:
    - database:/var/run/postgresql
volumes:
  database:

在我的app.py中,我尝试像这样连接到postgres:

conn = psycopg2.connect(database="products", user="user", password="password", host="database", port="5432")

当我跑docker-compose up我得到以下错误:
数据库是运行在主机上的服务器‘’(172.21.0.2),并接受在端口5432的TCP / IP连接?

我不知道我在哪里弄错了。

  • 容器“数据库”公开其端口5432。
  • 两个容器都在同一网络上,即“ web_app_default”。
  • 套接字文件存在于/var/run/postgresql“ Web”容器上的目录中。

有任何想法吗 ?

感谢您的答复,祝您有愉快的一天。

阮林福

我认为发生的事情是,即使将标志depends_on设置为database,也仅意味着web容器将在database容器启动启动。但是,第一次,数据库通常将花费相当多的时间来建立,并且当web服务器启动时,数据库仍未准备好接受连接。

解决此问题的2种方法:

  1. 无需更改代码的简便方法:运行docker-compose up -ddetachmode)并等待数据库完成初始化。然后docker-compose up -d再次运行,您的web容器现在将能够连接到数据库。
  2. 第二种方法是使用更新web容器,restart: always因此docker-compose它将继续尝试重新启动web容器,直到容器成功运行为止(直到数据库准备好接受连接为止)
version: "3"
services:
  web:
    depends_on:
      - database
    ...
    restart: always
    ...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何为Docker容器公开几个端口?

来自分类Dev

通过 ip 与端口公开访问 docker 容器

来自分类Dev

隐藏NGINX Docker容器公开的URL中的端口号

来自分类Dev

Docker:无法在其他容器中访问公开的端口

来自分类Dev

Docker容器之间的虚拟串行端口

来自分类Dev

从Docker公开/发布端口

来自分类Dev

使用boot2docker将docker容器应用程序端口公开给Windows主机

来自分类Dev

在docker run命令中提到--net = host时,Docker容器不会公开端口

来自分类Dev

Docker无法公开多个端口

来自分类Dev

Docker无法公开多个端口

来自分类Dev

Docker 不公开端口

来自分类Dev

了解为什么需要公开端口以在 docker0 上进行容器间通信

来自分类Dev

从Docker容器公开WSGI应用

来自分类Dev

从Docker容器公开WSGI应用

来自分类Dev

暴露Docker容器端口

来自分类Dev

如何找到从docker映像公开的端口?

来自分类Dev

在Elastic Beanstalk中从Docker公开多个端口

来自分类Dev

在Amazon ElasticBeanstalk上公开Docker端口

来自分类Dev

docker仅在主机上公开端口

来自分类Dev

Docker仅将端口公开给localhost

来自分类Dev

docker容器内端口转发

来自分类Dev

多个docker容器相同的端口

来自分类Dev

将Docker容器公开给公共IP

来自分类Dev

在内部IP上的随机端口上公开容器

来自分类Dev

docker 容器之间的代理

来自分类Dev

Docker-为什么这个带有公开/已发布端口的express.js容器拒绝连接?(使用boot2docker)

来自分类Dev

Docker撰写端口映射,主机端口!=容器端口

来自分类Dev

在主机之间共享容器ip和端口

来自分类Dev

docker-compose-公开链接的服务端口