Docker 笔记(3)

端口映射

1
2
#: 通过容器 id 获取 ip
docker inspect docker.test|grep "IPAddress"|cut -d '"' -f 4|uniq

无论如何,这些 ip 是基于本地系统的并且容器的端口非本地主机是访问不到的。此外,除了端口只能本地访问外,对于容器的另外一个问题是这些 ip 在容器每次启动的时候都会改变。

Docker 解决了容器的这两个问题,并且给容器内部服务的访问提供了一个简单而可靠的方法。Docker 通过端口绑定主机系统的接口,允许非本地客户端访问容器内部运行的服务。为了简便的使得容器间通信,Docker 提供了这种连接机制。

自动映射端口

-P 使用时需要指定 --expose 选项,指定需要对外提供服务的端口

1
$ docker run -t -P --expose 22 --name server  ubuntu

使用 docker run -P 自动绑定所有对外提供服务的容器端口,映射的端口将会从没有使用的端口池中 (49000..49900) 自动选择,你可以通过 docker ps 、docker inspect <container_id> 或者 docker port <container_id> 确定具体的绑定信息。

绑定端口到指定接口

1
2
3
4
#: 基本语法
$ docker run -p [([<host_interface>:[host_port]])|(<host_port>):]<container_port>[/udp] <image> <cmd>

#: 默认不指定绑定 ip 则监听所有网络接口。

绑定 TCP 端口

1
2
3
4
5
6
7
8
9
10
11
#: Bind TCP port 8080 of the container to TCP port 80 on 127.0.0.1 of the host machine.
$ sudo docker run -p 127.0.0.1:80:8080 <image> <cmd>

#: Bind TCP port 8080 of the container to a dynamically allocated TCP port on 127.0.0.1 of the host machine.
$ sudo docker run -p 127.0.0.1::8080 <image> <cmd>

#: Bind TCP port 8080 of the container to TCP port 80 on all available interfaces of the host machine.
$ sudo docker run -p 80:8080 <image> <cmd>

#: Bind TCP port 8080 of the container to a dynamically allocated TCP port on all available interfaces
$ sudo docker run -p 8080 <image> <cmd>

绑定 UDP 端口

1
2
#: Bind UDP port 5353 of the container to UDP port 53 on 127.0.0.1 of the host machine.
$ sudo docker run -p 127.0.0.1:53:5353/udp <image> <cmd>