Postgresql 在docker网络中运行的服务从外部连接(甚至从本地主机)安全吗?

Postgresql 在docker网络中运行的服务从外部连接(甚至从本地主机)安全吗?,postgresql,docker,docker-compose,Postgresql,Docker,Docker Compose,问题: 可以访问主机的任何人都可以连接到Docker网络吗?或者,如果端口不公开,Docker网络中运行的服务是否仅对Docker网络中运行的其他服务可见 背景: 我目前有一个带有postgresql数据库后端的web应用程序,其中两个组件都在同一台机器上通过docker运行,只有web应用程序在主机上公开端口。web应用程序连接到db没有问题,因为它们位于同一docker网络中。我正在考虑从我的数据库用户中删除密码,这样我就不必将密码存储在主机上并将其作为秘密传递到web应用程序容器中。在此之

问题: 可以访问主机的任何人都可以连接到Docker网络吗?或者,如果端口不公开,Docker网络中运行的服务是否仅对Docker网络中运行的其他服务可见

背景: 我目前有一个带有postgresql数据库后端的web应用程序,其中两个组件都在同一台机器上通过docker运行,只有web应用程序在主机上公开端口。web应用程序连接到db没有问题,因为它们位于同一docker网络中。我正在考虑从我的数据库用户中删除密码,这样我就不必将密码存储在主机上并将其作为秘密传递到web应用程序容器中。在此之前,我想确定docker网络的安全性

以下是我的docker compose示例:

version: '3.3'
services:

    database:
        image: postgres:9.5
        restart: always
        volumes:
              #preserves the database between containers
            - /var/lib/my-web-app/database:/var/lib/postgresql/data                

    web-app:
        image: my-web-app
        depends_on:
            - database
        ports:
            - "8080:8080"
            - "8443:8443"
        restart: always
        secrets:
            - source: DB_USER_PASSWORD

secrets:
  DB_USER_PASSWORD:
    file: /secrets/DB_USER_PASSWORD

非常感谢您的帮助。

在本机Linux主机上,任何拥有或能够找到容器专用IP地址的人都可以直接与容器联系。(使用
ifconfig
进行无特权的推动可以给你一些提示,说明它就在那里。)在非Linux上,通常有一个隐藏的Linux虚拟机,如果你能在其中获得一个shell,同样的技巧也会起作用。当然,如果您可以运行任何
docker
命令,那么您就可以
docker exec
容器中的shell

Docker的网络级保护不够强大,无法成为保护数据库的唯一工具。仍然需要使用标准用户名和密码凭据


(请注意,
docker exec
路径功能特别强大:由于未加密的机密最终会写入容器中的一个路径,因此能够运行
docker exec
意味着您可以轻松地提取它们。限制docker仅访问根目录也是一种良好的安全做法。)

在本机Linux主机上,任何拥有或能够找到容器专用IP地址的人都可以直接与容器联系。(使用
ifconfig
进行无特权的推动可以给你一些提示,说明它就在那里。)在非Linux上,通常有一个隐藏的Linux虚拟机,如果你能在其中获得一个shell,同样的技巧也会起作用。当然,如果您可以运行任何
docker
命令,那么您就可以
docker exec
容器中的shell

Docker的网络级保护不够强大,无法成为保护数据库的唯一工具。仍然需要使用标准用户名和密码凭据


(请注意,
docker exec
路径特别强大:由于未加密的机密最终会写入容器中的路径中,因此能够运行
docker exec
意味着您可以轻松提取它们。限制
docker
仅访问根目录也是一种良好的安全做法。)

谢谢!这正是我想要确认的,是的,我正在确保docker exec需要sudo运行。谢谢!这正是我想要确认的,是的,我正在确保docker exec需要sudo来运行。