首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >docker对端口的困惑

docker对端口的困惑
EN

Stack Overflow用户
提问于 2019-10-02 06:01:02
回答 1查看 42关注 0票数 1

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

代码语言:javascript
复制
postgres:
  image: postgres:12-alpine
  volumes:
    - ./init.sql:/docker-entrypoint-initdb.d/init.sql
  ports:
    - "5432:5432"

init.sql:

代码语言:javascript
复制
CREATE USER test WITH PASSWORD '123456';
ALTER USER test WITH SUPERUSER;
CREATE DATABASE test;

我还通过运行以下命令创建了一个pgAdmin4容器:

代码语言:javascript
复制
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容器IPAddress:docker container inspect 02e83f5f39d6 | grep IPAddress来设置到172.17.0.2的服务器连接,使用本地主机作为连接字符串在pgAdmin4中将失败。

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

代码语言:javascript
复制
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无法识别端口映射?是因为它是从另一个容器运行的吗?那么正确的设置应该是什么呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-02 06:08:42

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

对于pgAdmin容器,localhost本身就是它自己。因此,您需要指定IP以使pgAdmin指向正确的主机。

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

使用此设置没有任何错误。最好将pgAdmin容器作为同一合成文件的一部分。这样,您就可以将服务的名称用作到容器IP的DNS映射,以便于管理。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58192812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档