7.1 端口映射

当容器中运行一些网络应用,要让外部访问这些应用时,可以通过 -P -p 参数来指定端口映射。

1. 随机端口映射

当使用 -P(大写的)标记时,Docker会随机映射一个49000~49900的端口到内部容器开放的网络端口:

$ docker run -d -P tomcat:latest
da15993db0f7ee65d6aea55c46df577a829da8a23b6ab4344521a628c124e2f2

$ docker ps -l
CONTAINER ID   IMAGE           COMMAND             CREATED          STATUS         PORTS                                         NAMES
da15993db0f7   tomcat:latest   "catalina.sh run"   11 seconds ago   Up 8 seconds   0.0.0.0:32768->8080/tcp, :::32768->8080/tcp   goofy_payne

2. 指定端口映射

可以使用 -p(小写的)指定要映射的端口,支持的格式有:

  • IP:HostPort:ContainerPort:映射到指定地址的指定端口。

    $ docker run -d -p 127.0.0.1:8081:8080 tomcat:latest
    618cb503046450c407c25e662872bee3ef255e758da35848a5170aa8e37f2f2f
    
    $ docker ps -l
    CONTAINER ID   IMAGE           COMMAND             CREATED         STATUS         PORTS                      NAMES
    618cb5030464   tomcat:latest   "catalina.sh run"   6 seconds ago   Up 3 seconds   127.0.0.1:8081->8080/tcp   amazing_black
  • IP::ContainerPort:映射到指定地址的任意端口,本地主机会自动分配一个端口。

    $ docker run -d -p 127.0.0.1::8080 tomcat:latest
    26973a0210775a21d3a5d24c9d1cc69aa813e65791ee54aa4643ac13b9c1e348
    
    $ docker ps -l
    CONTAINER ID   IMAGE           COMMAND             CREATED         STATUS         PORTS                       NAMES
    26973a021077   tomcat:latest   "catalina.sh run"   6 seconds ago   Up 3 seconds   127.0.0.1:32769->8080/tcp   competent_brown
  • HostPort:ContainerPort:映射到所有地址的指定端口。

    $ docker run -d -p 8082:8080 tomcat:latest
    f20c20202f271b1ae772650d9c9affa582fda88edac7e2e0b6935e96cac96fb7
    
    $ docker ps -l
    CONTAINER ID   IMAGE           COMMAND             CREATED         STATUS         PORTS                                       NAMES
    f20c20202f27   tomcat:latest   "catalina.sh run"   6 seconds ago   Up 2 seconds   0.0.0.0:8082->8080/tcp, :::8082->8080/tcp   nostalgic_bell

可以使用udp标记来指定udp端口:

$ docker run -d -p 127.0.0.1:8084:8080/udp tomcat:latest
175f41d2042d6ee5183882273890ebec67330c7b17d90649ec18de60a6356380

$ docker ps -l
CONTAINER ID   IMAGE           COMMAND             CREATED         STATUS         PORTS                                NAMES
175f41d2042d   tomcat:latest   "catalina.sh run"   6 seconds ago   Up 2 seconds   8080/tcp, 127.0.0.1:8084->8080/udp   infallible_mendeleev

Last updated