首页 > 解决方案 > Docker在使用内部网络时不会暴露端口

问题描述

当我在文件中配置内部网络docker-compose时,通过该选项公开端口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不能将容器端口代理到主机或者我错过了什么?

标签: dockerdocker-composedocker-networking

解决方案


推荐阅读