当我在docker-compose
文件中配置internal network时,通过ports
选项公开的端口将不再起作用。
让我们考虑以下docker-compose.yml
文件:
version: '3'
services:
registry:
image: registry:2
ports:
- "127.0.0.1:5000:5000"
networks:
- internal
networks:
internal:
internal: true
当我使用internal: false
运行它时,一切都很好,端口5000将映射到主机。当我使用internal: true
选项运行它时,端口映射不再存在:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
de6412f692e7 registry:2 "/entrypoint.sh /etc…" 10 minutes ago Up 10 minutes registry_registry_1
但是,我仍然可以通过内部网络访问该端口:
$ docker-compose exec registry ip addr
[...]
inet 172.23.0.2/16 [...]
$ curl -v 172.23.0.2:5000
[...]
> GET / HTTP/1.1
[...]
< HTTP/1.1 200 OK
[...]
因此,docker-proxy
无法将容器端口代理到主机还是没有什么技术上的原因?