常用操作目录
1. 查看容器的主机名
[root@docker ~]# docker run -it --name t1 --rm busybox
/ # hostname
394a2c0539f5
2. 在容器启动时注入主机名
[root@docker ~]# docker run -it --name t1 --hostname busybox --rm busybox
/ # hostname
busybox
/ # cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2 busybox # 注入主机名时会自动创建主机名到IP的映射关系
/ # cat /etc/resolv.conf
options timeout:2 attempts:3 rotate single-request-reopen
; generated by /usr/sbin/dhclient-script
nameserver 100.100.2.136 # DNS也会自动配置为宿主机的DNS
nameserver 100.100.2.138
/ # ping www.baidu.com
PING www.baidu.com (220.181.38.150): 56 data bytes
64 bytes from 220.181.38.150: seq=0 ttl=51 time=8.225 ms
64 bytes from 220.181.38.150: seq=1 ttl=51 time=8.367 ms
3. 手动指定容器要使用的DNS
[root@docker ~]# docker run -it --name t1 --hostname busybox --dns 114.114.114.114 --rm busybox/ # cat /etc/resolv.conf
nameserver 114.114.114.114
options timeout:2 attempts:3 rotate single-request-reopen
/ # nslookup -type=a www.baidu.com
Server: 114.114.114.114
Address: 114.114.114.114:53
Non-authoritative answer:
www.baidu.com canonical name = www.a.shifen.com
Name: www.a.shifen.com
Address: 180.101.49.12
Name: www.a.shifen.com
Address: 180.101.49.11
4. 手动往/etc/hosts文件中注入主机名到IP地址的映射
[root@docker ~]# docker run -it --name t1 --hostname busybox --add-host www.a.com:1.1.1.1 --rm busybox
/ # cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
1.1.1.1 www.a.com
172.17.0.2 busybox
5. 开放容器端口
执行docker run的时候有个-p选项,可以将容器中的应用端口映射到宿主机中,从而实现让外部主机可以通过访问宿主机的某端口来访问容器内应用的目的。
-p选项能够使用多次,其所能够暴露的端口必须是容器确实在监听的端口。
-p选项的使用格式:
- -p <containerPort>
- 将指定的容器端口映射至主机所有地址的一个动态端口
- -p <hostPort>:<containerPort>
- 将容器端口<containerPort>映射至指定的主机端口<hostPort>
- -p <ip>::<containerPort>
将指定的容器端口<containerPort>映射至主机指定<ip>的动态端口 - -p <ip>:<hostPort>:<containerPort>
- 将指定的容器端口<containerPort>映射至主机指定<ip>的端口<hostPort>
动态端口指的是随机端口,具体的映射结果可使用docker port
命令查看。
[root@docker ~]# docker run --name web --rm -p 80 nginx
以上命令执行后会一直占用着前端,新开一个终端连接来看一下容器的80端口被映射到了宿主机的什么端口上
[root@docker ~]# docker port web
80/tcp -> 0.0.0.0:32768
[root@docker ~]# ss -anlt
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:*
LISTEN 0 128 [::]:32768 [::