我有一个与docker-compose一起运行的Docker设置。有两个网络,当前都与“网桥”驱动程序一起运行。如果知道IP,则docker网络A(又称frontend
)上的容器当前可以直接与网络B(又称backend
)上的容器通信,反之亦然。
A和B之间的所有此类通信能否被阻止?
是否可以通过在yml文件中进行适当的配置来实现?如果没有,那么什么docker命令或其他变通办法可以实现?
以下是我使用的docker-compose.yml文件的伪示例。我将网络B设置为internal: true
,这确实似乎阻止了B上的容器到主机网络/互联网的出站连接。但是,如果我知道/猜测它们的IP,我仍然可以从B上的容器ping A上的容器。
version: '3.5'
services:
proxy:
image: nginx:alpine
container_name: proxy1
ports:
- "80:8080/tcp"
- "443:8443/tcp"
networks:
- frontend
- backend
webapp:
image: lopush/webapp:latest
container_name: webapp1
networks:
- backend
networks:
frontend:
driver: bridge
internal: false
name: webapp_frontend
ipam:
driver: default
config:
- subnet: 172.18.0.1/16
backend:
driver: bridge
internal: true
name: webapp_backend
ipam:
driver: default
config:
- subnet: 172.19.0.1/16
实际设置中还有更多连接到backend
的容器,并且它们使用nginx服务器作为Internet的代理,但我认为这里的细节并不重要。