1. 程式人生 > >外部訪問docker容器(docker run -p/-P 指令)

外部訪問docker容器(docker run -p/-P 指令)

96 

Mark_Zhang  2017.06.07 18:17* 字數 570 閱讀 20839評論 0

容器中可以執行一些網路應用,要讓外部也可以訪問這些應用,可以通過 -P(大寫) 或 -p (小寫) 引數來指定埠對映。
(1)當使用 -P 標記時,Docker 會隨機對映一個 49000~49900 的埠到內部容器開放的網路埠。
使用 docker ps 可以看到,本地主機的 49155 被對映到了容器的 5000 埠。此時訪問本機的 49155 埠即可訪問容器內 web 應用提供的介面。

同樣的,可以通過 docker logs 命令來檢視應用的資訊。

(2)-p(小寫)則可以指定要對映的IP和埠,但是在一個指定埠上只可以繫結一個容器。支援的格式有 hostPort:containerPortip:hostPort:containerPort、 ip::containerPort

  • hostPort:containerPort(對映所有介面地址)
    將本地的 5000 埠對映到容器的 5000 埠,可以執行如下命令:
    $ sudo docker run -d -p 5000:5000 training/webapp python app.py

     此時預設會繫結本地所有介面上的所有地址。

  • ip:hostPort:containerPort (對映指定地址的指定埠)
    指定對映使用一個特定地址,比如 localhost 地址 127.0.0.1
    $ sudo docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py

  • ip::containerPort (對映指定地址的任意埠)
    繫結 localhost 的任意埠到容器的 5000 埠,本地主機會自動分配一個埠。
    sudo docker run -d -p 127.0.0.1::5000 training/webapp python app.py


    還可以使用 udp 標記來指定 udp 埠
    $ sudo docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py

檢視對映埠配置
使用 docker port 來檢視當前對映的埠配置,也可以檢視到繫結的地址

注意:

  • 容器有自己的內部網路和 ip 地址(使用 docker inspect 可以獲取所有的變數,Docker 還可以有一個可變的網路配置。)
  • -p 標記可以多次使用來繫結多個埠
    例如

$ sudo docker run -d -p 5000:5000 -p 3000:80 training/webapp python app.py

原文連結:https://yeasy.gitbooks.io/docker_practice/content/network/port_mapping.html