gpt4 book ai didi

postgresql - docker 对港口的困惑

转载 作者:行者123 更新时间:2023-11-29 12:49:14 25 4
gpt4 key购买 nike

我使用 compose 文件创建了一个 docker postgres 容器:

postgres:
image: postgres:12-alpine
volumes:
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
ports:
- "5432:5432"

初始化.sql:

CREATE USER test WITH PASSWORD '123456';
ALTER USER test WITH SUPERUSER;
CREATE DATABASE test;

我还通过运行创建了一个 pgAdmin4 容器:

docker pull dpage/pgadmin4
docker run -p 5050:80 \
-e "PGADMIN_DEFAULT_EMAIL=user@domain.com" \
-e "PGADMIN_DEFAULT_PASSWORD=SuperSecret" \
-d dpage/pgadmin4

在 pgAdmin 中设置连接时。我需要通过查看 postgres 容器 IP 地址来设置与 172.17.0.2 的服务器连接:docker container inspect 02e83f5f39d6 | grep IPAddress,在 pgAdmin4 中使用本地主机作为连接字符串将失败。

但是,当我使用 python sqlalchemy 时,我可以连接到 localhost:5432。

import pandas as pd
from sqlalchemy import create_engine, MetaData

eng = create_engine('postgresql://test:123456@localhost:5432/test', echo=True)
meta = MetaData()
meta.reflect(eng, schema='public')

这令人困惑。为什么 pgAdmin 无法识别端口映射?是因为它是从另一个容器运行的吗?那么正确的设置应该是什么?

最佳答案

localhost 是相对于容器/主机的。

对于 pgAdmin 容器,localhost 就是它本身。所以你需要指定 IP 来让 pgAdmin 指向正确的主机。

与在您的机器上运行的 python 脚本类似,localhost 是主机(您的 PC)。但是由于您指定了端口映射 5432:5432 localhost:5432 上的端口由 docker 转发到 postgres 容器端口 5432。所以如果脚本连接到 localhost :5432 - 它由 docker 转发到容器。

此设置没有任何问题。最好将 pgAdmin 容器作为同一个撰写文件的一部分。有了它,您可以将服务名称用作到容器 IP 的 DNS 映射,以便于管理。

关于postgresql - docker 对港口的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58192812/

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