限制对Docker容器的Internet访问?

在仍然转发端口的同时限制对单个docker容器的Internet访问的最佳方法是什么?

我目前这样做的方式是这样的:

sudo docker network create --internal --subnet 10.1.1.0/24 no-internet
sudo docker run --name gitlab -d -p 80:80 -p 822:22 --restart always gitlab/gitlab-ce
sudo docker network connect no-internet gitlab
sudo docker network disconnect bridge gitlab

问题是,如果我重新启动系统,端口将不再转发:

重启前sudo docker ps:

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                             PORTS                                              NAMES
2d2a062744ec        gitlab/gitlab-ce    "/assets/wrapper"   13 seconds ago      Up 13 seconds (health: starting)   0.0.0.0:80->80/tcp,443/tcp,0.0.0.0:822->22/tcp   gitlab

sudo docker ps重启后:

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                   PORTS               NAMES
2d2a062744ec        gitlab/gitlab-ce    "/assets/wrapper"   12 minutes ago      Up 2 minutes (healthy)                       gitlab
最佳答案
因此,如果我正确理解您的场景,您希望避免将您的主机网络共享到您的gitlab容器,以确保gitlab无法连接到互联网.同时,您希望共享主机的网络以将容器端口绑定到主机系统.它不起作用,但以下可能是您可接受的解决方法:共享同一内部网络的docker容器可以连接到同一网络上其他容器的公开/已发布端口.

你可以遵循这种方法

>在gitlab容器前面运行反向代理
>反向代理是您的内部网络和默认桥接网络(包括主机网络)的成员
>这使反向代理能够绑定到主机端口并将请求转发到gitlab容器,而gitlab仍然无法访问互联网

我很快把这个例子放在一起,希望能让你开始:

docker network create –internal –subnet 10.1.1.0/24 no-internet

码头网络创建互联网

泊坞窗,compose.yml:

version: '2'

services:
  whoami:
    image: jwilder/whoami
    container_name: whoami
    networks:
      - no-internet

  proxy:
    image: Nginx:1.13-alpine 
    container_name: proxy
    networks:
      - internet
      - no-internet
    volumes:
      - ./vhost.conf:/etc/Nginx/conf.d/default.conf
    ports:
      - "80:80"

networks:
  internet:
    external:
      name: internet
  no-internet:
    external:
      name: no-internet

vhost.conf:

upstream whoami {
    server whoami:8000;
}

server {
    server_name localhost;
    listen 80;
    location / {
        proxy_pass http://whoami;
    }
}

请注意,实际上不需要上面提到的互联网,因为无论如何,泊坞容器默认共享主机网络.它只是让事情变得更清晰.

在上面描述的示例中,打开http:// localhost /,您将看到whoami容器的响应,但是whoami容器本身无法连接到Internet.

相关文章

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Li...
1、什么是docker?答:docker是开源的应用容器引擎;开发人员把他们的应用及依赖包打包发布到容器当中。...
1、什么是namespace? 答:名称空间,作用隔离容器 2、namespace隔离有那些? 答:ipc:共享内存、消息队...
1、Docker能在非Linux平台(Windows+MacOS)上运行吗? 答:可以 2 、如何将一台宿主机的docker环境...
环境要求: IP hostname 192.168.1.1 node1 项目规划: 容器网段:172.16.10.0/24 NGINX:172.16.10.10...
文档上传地址:https://files.cnblogs.com/files/lin-strive/07-docker%E8%B7%A8%E4%B8%BB%E6%9C%BA%E7...