Docker学习笔记(二):端口映射与容器互联
端口映射
使用docker run时,可以指定-P(大写)与-p(小写)参数映射端口。
docker run -P
-P(大写)会随机映射一个端口到容器的内部端口
-> [feifei@ffmac.local] [~] docker run -Pd nginx
993eb1ea540ef2314a31815a6605fe565031ffb07828a2c35fa11e2b4bb48114
-> [feifei@ffmac.local] [~] 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
访问 http://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]]
查看容器端口映射:
-> [feifei@ffmac.local] [~] 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
-> [feifei@ffmac.local] [~] docker run --name link1 -it ubuntu
root@a58c9864bb12:
// 窗口2
-> [feifei@ffmac.local] [~] 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