微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 无法使用Postgres,Docker Compose和Psycopg2将主机名“db”转换为地址

一个文件夹中,我有3个文件:base.py,Dockerfile和docker-compose.yml.

base.py:

import psycopg2

conn = psycopg2.connect("dbname='base123' user='postgres' host='db' password='pw1234'")

Dockerfile:

FROM ubuntu:16.04

RUN apt-get update
RUN apt-get -y install python-pip
RUN apt-get update
RUN pip install --upgrade pip
RUN pip install psycopg2-binary

copY base.py base.py

RUN python base.py

泊坞窗,compose.yml:

version: '3'
services:
  db:
    image: 'postgres:latest'
    expose:
      - "5432"
    environment:
      POSTGRES_PASSWORD: pw1234
      POSTGRES_DB: base123
  aprrka:
    build: .    
    depends_on:
      - db

在我运行docker-compose之后,我收到以下错误

Traceback (most recent call last):
  File "base.py", line 5, in <module>
conn = psycopg2.connect("dbname='base123' user='postgres' host='db' password='pw1234'")
   File "/usr/local/lib/python2.7/dist-packages/psycopg2/__init__.py", line 130, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: Could not translate host name "db" to address: Name or service not kNown

ERROR: Service 'aprrka' Failed to build: The command '/bin/sh -c python base.py' returned a non-zero code: 1

我不知道为什么会有这个错误.我暴露了端口5432.认情况下,Compose为app设置了一个网络.每个服务加入认网络,我认为我的应用程序与postgres应该一起工作.我写了不正确的docker-compose.yml吗?

解决方法:

问题是你不应该运行python base.py作为RUN指令的一部分.

只有在构建映像时才会执行RUN指令. postgres容器此时没有运行,也没有创建网络.相反,您想要使用CMD指令.

将Dockerfile更改为:

FROM ubuntu:16.04

RUN apt-get update
RUN apt-get -y install python-pip
RUN apt-get update
RUN pip install --upgrade pip
RUN pip install psycopg2-binary

copY base.py base.py

CMD ["python", "base.py"]

以上应该导致解析主机名db.但是,如果您的python代码没有用于连接到数据库的任何重新连接逻辑,则容器可能仍会出错.这是因为postgres容器将运行,但数据库不准备接受连接.

这可以通过添加restart来永久修复:始终到你的docker-compose.yml.

version: '3'
services:
  db:
    image: 'postgres:latest'
    expose:
      - "5432"
    environment:
      POSTGRES_PASSWORD: pw1234
      POSTGRES_DB: base123
  aprrka:
    restart: always
    build: .    
    depends_on:
      - db

希望这会让你开始运行.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐