码头工人对港口的困惑

时间:2019-10-01 22:01:02

标签: postgresql docker docker-compose

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

New-ComplianceSearch -Name "$SearchName" -ExchangeLocation all -ContentMatchQuery "'sent>=$date AND sent<=$date AND subject:`"$Subject`"'"

init.sql:

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

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

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

在pgAdmin中设置连接时。我需要通过查看postgres容器IPAddress:docker pull dpage/pgadmin4 docker run -p 5050:80 \ -e "PGADMIN_DEFAULT_EMAIL=user@domain.com" \ -e "PGADMIN_DEFAULT_PASSWORD=SuperSecret" \ -d dpage/pgadmin4 来将服务器连接设置为172.17.0.2,将本地主机用作连接字符串将在pgAdmin4中失败。

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

docker container inspect 02e83f5f39d6 | grep IPAddress

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

1 个答案:

答案 0 :(得分:2)

localhost相对于容器/主机。

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

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

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