一个参数搞定 Docker 禁止单个容器访问外网

2023-10-05 08:11:51 浏览数 (1)

前言

最近自己内网部署了一个私有相册程序,找了一圈没有找到比较符合自己的程序,但是有一个前端半开源的程序免费功能是满足了自己的需求,但是因为不开源,所以考虑到安全性问题,所以打算自己部署服务端之后将整个容器进行离线,不让访问互联网,也能进一步保证无法调用外部接口进行传输相册数据,下面请看整个实现过程。

原理

在网上查阅了相关资料基本上都是直接把DNS设置一个不可用的就无法解析域名访问了,但是这样做直接通过IP地址访问还是禁止不了;还有一些方案是直接把docker容器的网卡改为 none,但是这样实现的话我自己内网要访问容器都没有办法; 我要实现的需求是:容器可以访问内网所有资源,容器有ip地址提供我可以直接连接访问WEB页面,但是容器内不能访问所有的外网资源。

找了一圈之后最终是通过设置禁用容器网卡上的IP地址伪装选项来达到无法上外网的效果,访问内网就还是正常访问。

参考命令

配置参考命令如下,我使用的docker-compose,若是直接使用cli请替换对应命令。

代码语言:javascript复制
version: '3'
services:
  app:
    image: www.51it.wang/lcry-photo:latest
    networks:
      - private
networks:
  private:
    driver: bridge
    driver_opts:
      com.docker.network.bridge.enable_ip_masquerade: 'false' # 重要的就是这一行

结论

这样做可以针对你觉得不安全的产品进行一个离线联网操作,这样做只针对单个docker容器生效,其他容器完全不受此影响,完全做到了按需更改,通过DNS的方式能够达到一定的效果,但是不完美,如果程序直接通过IP访问资源就会存在遗漏的情况,若你还有其他方案请评论区留言一起交流~

参考链接

Bridge network driver | Docker Docs

function Catalogswith(){document.getElementById("catalog-col").classList.toggle("catalog");document.getElementById("catalog").classList.toggle("catalog")}

0 人点赞