Docker在使用内部网络时不会暴露端口

sve*_*.to 8 docker docker-compose docker-network

当我在文件中配置内部网络docker-compose时,通过该ports选项公开端口将不再起作用。

\n\n

让我们考虑以下docker-compose.yml文件:

\n\n
version: \'3\'\nservices:\n  registry:\n    image: registry:2\n    ports:\n      - "127.0.0.1:5000:5000"\n    networks: \n      - internal\nnetworks: \n  internal:\n    internal: true\n
Run Code Online (Sandbox Code Playgroud)\n\n

当我用 运行它时internal: false,一切都很好,端口 5000 将映射到主机。当我使用该internal: true选项运行它时,不再有端口映射:

\n\n
$ docker ps\nCONTAINER ID        IMAGE                                   COMMAND                  CREATED             STATUS              PORTS               NAMES\nde6412f692e7        registry:2                              "/entrypoint.sh /etc\xe2\x80\xa6"   10 minutes ago      Up 10 minutes                           registry_registry_1\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是,我仍然可以从主机通过内部网络到达该端口:

\n\n
$ docker-compose exec registry ip addr\n[...]\n    inet 172.23.0.2/16 [...]\n$ curl -v 172.23.0.2:5000\n[...]\n> GET / HTTP/1.1\n[...]\n< HTTP/1.1 200 OK\n[...]\n
Run Code Online (Sandbox Code Playgroud)\n\n

因此,应该没有技术原因docker-proxy无法将容器端口代理到主机,或者我错过了什么?

\n