Docker學習筆記(二):埠映射與容器互聯

埠映射

使用docker run時,可以指定-P(大寫)與-p(小寫)參數映射埠。

docker run -P

-P(大寫)會隨機映射一個埠到容器的內部埠

-> [[email protected]] [~] docker run -Pd nginx
993eb1ea540ef2314a31815a6605fe565031ffb07828a2c35fa11e2b4bb48114
-> [[email protected]] [~] docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                   NAMES
993eb1ea540e        nginx               "nginx -g 'daemon of…"   5 seconds ago       Up 5 seconds        0.0.0.0:32771->80/tcp   upbeat_payne

訪問 //127.0.0.1:32771/ 看到nginx歡迎頁面。

docker run -p

-p(小寫)可以指定埠,可以有以下格式:HostPort:ContainerPort,IP:HostPort:ContainerPort,IP::ContainerPort

  • 映射所有地址
    可以多次指定-p,不同宿主機埠可以映射到相同的容器內部埠,反之不可以。
docker run -p 8000:80 -p 8001:80 -d --name cntr1 nginx
  • 映射指定地址指定埠
docker run -p 127.0.0.1:8002:80 -d nginx
  • 映射指定地址任意埠
docker run -p 127.0.0.1::80 -d nginx

docker port

docker port CONTAINER [PRIVATE_PORT[/PROTO]]
查看容器埠映射:

-> [[email protected]] [~] docker port cntr1
80/tcp -> 0.0.0.0:8001
80/tcp -> 0.0.0.0:8000

容器互聯

使用docker run時指定–link實現容器互聯,格式是被連接容器名[:別名],別名可忽略。
它會更新容器的/etc/hosts文件與環境變數,也就是env的內容。從下面的窗口2結果可以看到host文件與env的變化:

// 窗口1
-> [[email protected]] [~] docker run --name link1 -it ubuntu
root@a58c9864bb12:

// 窗口2
-> [[email protected]] [~] docker run --name link2 --link link1:link1alias -it ubuntu

root@cfcb707dfba3: cat /etc/hosts|grep link
172.17.0.2	link1alias a58c9864bb12 link1

root@cfcb707dfba3: env|grep link
LINK1ALIAS_NAME=/link2/link1alias
Tags: