我已经创建了以下docker-compose文件...
阅读了Docker网站上的各种文档后,我的预期是pgadmin容器可以通过5432端口访问postgres容器,但我不应该能够直接从主机访问postgres。然而,我可以使用psql从主机访问数据库。
实际上,如果我注释掉expose和ports行,我仍然可以从主机访问两个容器。
我错过了什么?
编辑 - 我通过首先运行“docker container inspect ...”来获取IP地址来访问容器。对于postgres容器,我正在使用
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
阅读了Docker网站上的各种文档后,我的预期是pgadmin容器可以通过5432端口访问postgres容器,但我不应该能够直接从主机访问postgres。然而,我可以使用psql从主机访问数据库。
实际上,如果我注释掉expose和ports行,我仍然可以从主机访问两个容器。
我错过了什么?
编辑 - 我通过首先运行“docker container inspect ...”来获取IP地址来访问容器。对于postgres容器,我正在使用
psql -h xxx.xxx.xxx.xxx -U postgres
它会提示我输入密码,然后允许我执行所有你所期望的正常操作。
对于pgadmin容器,我将浏览器指向IP地址并获取pgadmin界面。
请注意,这两个操作都是在主机上的终端中执行的,而不是在任何容器内部执行的。我还注释掉了暴露命令,但仍然可以访问postgres数据库。
psql
命令? - David MazeEXPOSE
只是文档说明。您可以启动一个不暴露任何端口的容器,然后在不同的端口上启动一些守护进程。主机将能够通过container_ip:port
访问它们。更多信息请参见此处。 - tgogos