【发布时间】:2021-11-11 13:58:36
【问题描述】:
我正在自定义 docker 网络中的 docker 容器中运行 postgres 服务器,我发现我可以使用主机上的psql 访问它。
从安全角度来看,这在我看来是不可取的,因为我认为 docker 网络的目的是隔离对容器的访问。
我的想法是,我会在同一个 docker 网络中的单独容器中运行我的应用程序,并仅在应用程序容器上发布端口。这样,外部世界可以访问应用程序,但不能访问数据库。
我的问题是:为什么 5432 端口在没有我明确指定的情况下被发布到 postgres 容器上的主机,我该如何“取消发布”这个端口?
还有一个相关的问题是:在这种情况下发布端口 5432 是一个安全问题(或至少 不如不发布它安全),我错了吗?
我的容器在这里运行官方 docker postgres 镜像:https://hub.docker.com/_/postgres/
感谢您的帮助!
编辑:这是我用来运行容器的 docker 命令:
docker run -d --restart=always --name=db.geppapp.com -e "POSTGRES_USER=<user>" -e "POSTGRES_PASSWORD=<password>" -e "POSTGRES_DB=gepp" -v "/mnt/storage/postgres-data:/var/lib/postgresql/data" --net=db postgres
编辑 2:我最初的问题并不完全正确,因为 docker 实际上并没有将端口 5432 发布到主机,而是我在使用 psql 连接到 postgres 时将容器的 IP 地址指定为主机,如下所示:
psql --host=<docker-assigned-ip> --username=<user> --dbname=gepp
所以阻止我限制从主机访问容器的事情实际上是在主机网络上为容器分配了一个 IP 地址。
【问题讨论】:
-
你是用
docker run还是docker-compose启动容器?请发布您使用的docker run命令或docker-compose.yaml -
编辑问题以包含
docker run命令 -
您如何使用
psql访问容器?您可以从其他主机访问它吗?
标签: postgresql docker