Docker(组合)网络 - 服务隔离不起作用

问题描述 投票:0回答:1

我有三个 docker-compose 文件。每个都包含一个服务,所有服务都跨越自己的网络,并且仅通过“外部”引用其他必要的网络。

建筑
允许使用以下通信外壳:

  • 前端<->服务
  • 服务<->后端
  • 但不是前端 <-> 后端

问题
不幸的是,如果我执行

docker exec frontend ping backend
它就会起作用!
docker exec backend ping frontend
也一样。

我的设置有什么问题吗?

前端的 docker-compose.yaml:

services:
  frontend:
    image: alpine
    container_name: frontend
    networks:
      - frontend_net
      - service_net
    entrypoint: "/bin/sh -c 'trap exit TERM; while :; do echo alive; sleep 10m & wait $${!}; done;'"

networks:
  frontend_net:
    name: frontend_net
    attachable: true
    #internal: true
  service_net:
    external: true

服务的 docker-compose.yaml:

services:
  service:
    image: alpine
    container_name: service
    networks:
      - service_net
    entrypoint: "/bin/sh -c 'trap exit TERM; while :; do echo alive; sleep 10m & wait $${!}; done;'"

networks:
  service_net:
    name: service_net
    #internal: true

后端的 docker-compose.yaml:

services:
  backend:
    image: alpine
    container_name: backend
    networks:
      - backend_net
      - service_net
    entrypoint: "/bin/sh -c 'trap exit TERM; while :; do echo alive; sleep 10m & wait $${!}; done;'"

networks:
  backend_net:
    name: backend_net
    attachable: true
    #internal: true
  service_net:
    external: true

如果一切都已启动并运行,我的网络将如下所示:

# docker network list
NETWORK ID     NAME                     DRIVER    SCOPE
4b162b628e76   backend_net              bridge    local
f118e228948d   bridge                   bridge    local
b3bf160b09a3   frontend_net             bridge    local
45ff3d4f66d0   host                     host      local
8eedcf91c792   none                     null      local
a745922e2eea   service_net              bridge    local
docker docker-compose docker-networking isolation
1个回答
0
投票

每个容器都可以连接到同一共享网络上的其他容器,在这种情况下,前端和后端共享服务网络。如果您想确保两个容器无法相互连接,请确保它们没有公共网络。

在这种情况下,我会从前端和后端删除服务网络。您可以将服务容器(不是一个好名字)放置在前端和后端网络上,或者仅为每个互连创建其他网络,以便服务容器无法访问这些网络上的其他容器。

© www.soinside.com 2019 - 2024. All rights reserved.