daz*_*sed 3 docker docker-compose
我创建了以下 docker-compose 文件...
version: '3'
services:
db-service:
image: postgres:11
volumes:
- ./db:/var/lib/postgresql/data
expose:
- 5432
environment:
- POSTGRES_PASSWORD=mypgpassword
networks:
- net1
pgadmin:
image: dpage/pgadmin4
volumes:
- ./pgadmin:/var/lib/pgadmin
ports:
- 5000:80
environment:
- PGADMIN_DEFAULT_EMAIL=me@gmail.com
- PGADMIN_DEFAULT_PASSWORD=mypass
networks:
- net1
networks:
net1:
external: false
Run Code Online (Sandbox Code Playgroud)
通过阅读 docker 站点上的各种文档,我的期望是 pgadmin 容器能够通过端口 5432 访问 postgres 容器,但我不应该能够直接从主机访问 postgres。但是,我可以使用 psql 从主机访问数据库。
事实上,如果我注释掉公开和端口行,我仍然可以从主机访问这两个容器。
我对此缺少什么?
docker container inspect...编辑 - 我通过首先运行来获取 IP 地址来访问容器。对于我正在使用的 postgres 容器
psql -h xxx.xxx.xxx.xxx -U postgres
Run Code Online (Sandbox Code Playgroud)
它提示我输入密码,然后允许我执行您期望的所有正常操作。
对于 pgadmin 容器,我将浏览器指向 IP 地址并获取 pgadmin 界面。
请注意,这两个命令都是从主机上的终端执行的,而不是从任一容器内执行的。我还注释掉了公开命令,并且仍然可以访问 postgres 数据库。
docker-compose为这两个容器创建一个网络,以便在运行时能够通过 DNS 服务相互通信,该服务将包含按名称指向每个服务的指针。
因此,从容器的角度来看pgadmin,可以在主机名下访问数据库服务器db-service(因为这是您在 docker-compose.yml 文件中为服务命名的名称)。
因此,该流量不会像您假设的那样通过主机,而是通过上述网络。
为了证明,docker exec -it [name-of-pg-admin-container] /bin/sh请输入:
ping db-service。您将看到 docker 提供了 DNS 解析,您甚至可以在那里打开到普通 postgres 端口的连接。
| 归档时间: |
|
| 查看次数: |
8396 次 |
| 最近记录: |