python - 自定义 Docker 映像在另一台机器上失败(psycopg2.OperationalError: could not translate host name to address)
问题描述
对 Docker 和 Postgres 来说绝对是新的(我知道它们之间的关系并不紧密,但请继续阅读)。
我有一个简单的 python 脚本(不是 Django 项目;不是 Kivy 项目 - 只是一个.py文件)。它获取一些东西并将其写入 Postgres 数据库(使用psycopg2
)。在我的(Windows 10)机器上,(经过一百万次试验和错误才能使其正常工作)它可以工作。所以当我docker-compose up
完成整个项目时,它会做它应该做的事情,并将其写入 Postgres 数据库。之后,当我Docker push
将生成的映像发送到 DockerHub,然后Docker pull
转到完全不相关的 Linux Azure VM 时,它失败并出现以下错误:
Traceback (most recent call last):
File "/app/file00.py", line 19, in <module>
conn = psycopg2.connect(
File "/usr/local/lib/python3.9/site-packages/psycopg2/__init__.py", line 127, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: could not translate host name "zedb" to address: Name or service not known
zedb
是 Docker-compose 文件中 Postgres 数据库服务的名称(我已经粘贴在下面)。
我知道我做错了什么,但我不确定它是什么。
用于脚本的 DockerFile(它几乎是 VSCode 为您提供的默认模板):
# For more information, please refer to https://aka.ms/vscode-docker-python
FROM python:latest
# Keeps Python from generating .pyc files in the container
ENV PYTHONDONTWRITEBYTECODE=1
# Turns off buffering for easier container logging
ENV PYTHONUNBUFFERED=1
# Install pip requirements
COPY requirements.txt .
RUN python -m pip install -r requirements.txt
WORKDIR /app
COPY . /app
# Switching to a non-root user, please refer to https://aka.ms/vscode-docker-python-user-rights
RUN useradd appuser && chown -R appuser /app
USER appuser
# During debugging, this entry point will be overridden. For more information, please refer to https://aka.ms/vscode-docker-python-debug
CMD ["python", "file00.py"]
db 部分不包含 Dockerfile,而是init.sql
创建脚本写入所需的表的文件。它从本地安装到 docker-compose 文件中的 Postgres 映像。据我了解,如果容器以某种方式失败/关闭,则表中的数据将被保留(卷持久性),并且当容器再次启动时,将创建表。这是init.sql
文件中的内容:
CREATE TABLE IF NOT EXISTS pt (
serial_num SERIAL,
col1 VARCHAR (40) NOT NULL PRIMARY KEY,
col2 VARCHAR (150) NOT NULL
);
关于这一切,我可能在很多层面上都错了,但是没有人可以检查,我正在自己学习这一切。
最后,这是docker-compose
文件。
version: '3'
services:
zedb:
image: 'postgres'
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=user123!
- POSTGRES_DB=fkpl
- PGDATA=/var/lib/postgresql/data/db-files/
expose:
- 5432
ports:
- 5432:5432
volumes:
- ./db/:/var/lib/postgresql/data/
- ./db/init.sql:/docker-entrypoint-initdb.d/init.sql
zescript:
build: ./app
volumes:
- ./app:/usr/scr/app
depends_on:
- zedb
任何帮助是极大的赞赏。
解决方案
推荐阅读
- firebase - docker stop 时优雅地停止 firebase 模拟器
- docker - 尝试将撰写文件转换为 kubernetes 清单时出错
- javascript - 如果数组的对象在 Javascript 中包含多个逗号分隔值,则复制整个数组
- terraform - Terraform - 源模块可以为每个实例操作系统使用不同的数据源吗?
- c# - C# Selenium Element 使用 xpath 查找问题
- css - 如何隐藏左边:-100%
- sql - SSRS 无法解析 SQL 查询
- postgresql - 使用 % 比较两个文本数组列并按匹配数排序
- php - Laravel 迁移:“外键约束格式不正确”)
- angularjs - AngularJS - 如何在提供者中使用工厂