menu E4b9a6's blog
rss_feed
E4b9a6's blog
有善始者实繁,能克终者盖寡。

限制docker容器访问外网

作者:E4b9a6, 创建:2024-11-08, 字数:1029, 已阅:180, 最后更新:2024-11-08

在 github 上找到合适的程序,打算自己部署,但对于一些小众或者不开源的程序来说又有数据隐私泄露的问题

所以在部署这些第三方容器时,考虑限制 Docker 容器的外网访问权限,以保障数据安全

经过尝试,将网络设置为 None/Internal 都会导致无法从 Nginx 代理将请求解析到 Docker 容器中

翻阅 Docker 的文档,查找到 docker-bridge#options 部分,经实践可以通过如下2个参数来限制容器的外网访问能力:

  • com.docker.network.bridge.enable_ip_masquerade
  • com.docker.network.bridge.gateway_mode_ipv4

前者禁用 NAT 伪装实现断网,后者可以设置一个过大的值如 99999 来导致请求异常

前者的稳定性大于后者,将 compose.yaml 改造如下:

YAML
services:
  memos:
    image: alpine:latest
    container_name: memos
    volumes:
      - ./memos:/memos
    command: ["/memos/memos", "--data=/memos/data", "--mode=prod","--addr=0.0.0.0"]
    restart: unless-stopped
    networks:
      - private_bridge
    ports:
      - 127.0.0.1:8081:8081

networks:
  private_bridge:
    driver: bridge
    driver_opts:
      com.docker.network.bridge.enable_ip_masquerade: 'false' # 禁用 NAT伪装 实现断网
      com.docker.network.bridge.enable_icc: 'false' # 加强内部隔离,不允许访问其它容器

经设置后,容器将无法访问外网与其它容器,以此来保障数据安全


[[replyMessage== null?"发表评论":"发表评论 @ " + replyMessage.m_author]]

account_circle
email
web_asset
textsms

评论列表([[messageResponse.total]])

还没有可以显示的留言...
gravatar
[[messageItem.m_author]] [[messageItem.m_author]]
[[messageItem.create_time]]
[[getEnviron(messageItem.m_environ)]]
[[subMessage.m_author]] [[subMessage.m_author]] @ [[subMessage.parent_message.m_author]] [[subMessage.parent_message.m_author]]
[[subMessage.create_time]]
[[getEnviron(messageItem.m_environ)]]