我使用撰写文件创建了一个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无法识别端口映射?是因为它是从另一个容器运行的吗?那么正确的设置应该是什么?
答案 0 :(得分:2)
localhost
相对于容器/主机。
对于pgAdmin容器,localhost
本身就是。因此,您需要指定IP以使pgAdmin指向正确的主机。
对于在您的计算机上运行的python脚本,类似地,localhost
是主机(您的PC)。但是,由于您指定了端口映射5432:5432
,因此localhost:5432
上的端口已由docker转发至postgres容器端口5432。因此,如果脚本连接至localhost:5432
-docker将其转发至容器。
此设置没有错。最好将pgAdmin容器作为同一撰写文件的一部分。这样,您就可以将服务名称用作DNS映射到容器IP,以便于管理。