docker run -d -P nginx
5b06aa0d5b1db1ec33c7587f9d76cf992dd0ed4a8bdbbc3bde7181858e5732d4
参数说明: -d:让容器在后台运行。 -P:将容器内部使用的网络端口随机映射到我们使用的主机上。 (这个是需要dockerfile 使用 expose 命令)
docker port
docker port 5b0
80/tcp -> 0.0.0.0:32769
可以看到 80 端口被映射到了 32769 使用curl看一下 (也可以用浏览器打开)
curl http://localhost:32769
可以看到如下的信息
...
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
也可以用 docker ps
来查看端口
docker run -p 主机端口:容器端口 image
docker run -p 88:80 nginx
刚开始使用容器的时候我们经常会直接在一个容器A直接使用 localhost来访问另一个容器B的服务,这个当然是访问不到的。因为localhost这个时候是容器A自己的地址。 把localhost换成自己的主机的ip地址就可以了 我们用下面的命令新开一个容器来测试 http://192.168.2.188这个是我机子的IP的地址
docker run -it nginx bash
root@3c00ec777717:/# curl http://localhost:88
curl: (7) Failed to connect to localhost port 88: Connection refused
root@3c00ec777717:/# curl http://192.168.2.188:88
创建一个新的网络
docker network create -d bridge net1
参数说明: -d:参数指定 Docker 网络类型,有 bridge、overlay。 其中 overlay 网络类型用于 Swarm mode,在本小节中你可以忽略它。 查看所有的网络
docker network ls
# 这个是输出来的内容
NETWORK ID NAME DRIVER SCOPE
52ab9790d3a0 net1 bridge local
创建测试容器1
docker run -it --name test1 --network net1 test bash
创建测试容器2
docker run -it --name test2 --network net1 test bash
在测试容器2里面ping test1
ping test1
# 可以看到我们是可以ping得通的
PING test1 (172.19.0.2) 56(84) bytes of data.
64 bytes from test1.net1 (172.19.0.2): icmp_seq=1 ttl=64 time=0.151 ms
注 test 镜像是我们用nginx基础镜像安装上了 ping命令,你也可以直接安装它
FROM nginx
Run apt-get update && apt-get install -y iputils-ping
如果本地确实需要网络的方式,更方便的方式是使用docker-compose
我们知道windows系统 下面有一个文件 C:\Windows\System32\drivers\etc\host 可以本来自定义一些域名的解析 docker 下面同样有。 我们可以用下面的方式来添加 --add-host
docker run -it --add-host www.malema.net:192.168.1.1 --add-host host2:192.168.1.2 ubuntu
测试一下,先安装一下ping命令
apt-get update && apt-get install -y iputils-ping
#等装好后
root@3827e324a2e3:/# ping www.malema.net
# 可以看到地址变了
PING www.malema.net (192.168.1.1) 56(84) bytes of data.
docker run -it --rm -h host_ubuntu --dns=114.114.114.114 --dns=8.8.8.8 --dns-search=test.com ubuntu cat /etc/resolv.conf
search test.com
nameserver 114.114.114.114
nameserver 8.8.8.8
参数说明: --rm:容器退出时自动清理容器内部的文件系统。 -h HOSTNAME 或者 --hostname=HOSTNAME: 设定容器的主机名,它会被写到容器内的 /etc/hostname 和 /etc/hosts。 --dns=IP_ADDRESS: 添加 DNS 服务器到容器的 /etc/resolv.conf 中,让容器用这个服务器来解析所有不在 /etc/hosts 中的主机名。 --dns-search=DOMAIN: 设定容器的搜索域,当设定搜索域为 .example.com 时,在搜索一个名为 host 的主机时,DNS 不仅搜索 host,还会搜索 host.example.com。