gpt4 book ai didi

python - Docker公开容器之间的端口

转载 作者:行者123 更新时间:2023-12-02 19:00:34 25 4
gpt4 key购买 nike

我想要一个可与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”。
  • 套接字文件位于“Web”容器上的/var/run/postgresql目录中。

  • 有任何想法吗 ?

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

    最佳答案

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

    解决此问题的2种方法:

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

    关于python - Docker公开容器之间的端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60737960/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com