主题:Docker网络
外部访问容器
容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过-P
或-p
参数来指定端口映射。
当使用-P
标记时,Docker
会随机映射一个端口到内部容器开放的网络端口。 使用docker container ls
可以看到,本地主机的 32768 被映射到了容器的 80 端口。此时访问本机的 32768 端口即可访问容器内 NGINX 默认页面。
$ docker run -d -P nginx:alpine
映射所有接口地址
使用hostPort:containerPort
格式本地的 80 端口映射到容器的 80 端口,可以执行
映射到指定地址的指定端口
可以使用ip:hostPort:containerPort
格式指定映射使用一个特定地址,比如localhost
地址127.0.0.1
映射到指定地址的任意端口
使用ip::containerPort
绑定localhost
的任意端口到容器的80端口,本地主机会自动分配一个端口。
查看映射端口配置
使用docker port
来查看当前映射的端口配置,也可以查看到绑定的地址
容器互联
如果之前有 Docker
使用经验,可能已经习惯了使用--link
参数来使容器互联。 随着 Docker
网络的完善,强烈建议大家将容器加入自定义的Docker
网络来连接多个容器,而不是使用 --link
参数。
新建网络
$ docker network create -d bridge my-net
-d
参数指定Docker
网络类型,有bridge overlay
,其中overlay
网络类型用于Swarm mode
连接容器
运行一个容器并连接到新建的my-net
网络
$ docker run -it --rm --name busybox1 --network my-net busybox sh
配置DNS
在容器中使用 mount
命令可以看到挂载信息
如果用户想要手动指定容器的配置,可以在使用docker run
命令启动容器时加入如下参数: -h HOSTNAME
或者--hostname=HOSTNAME
设定容器的主机名,它会被写到容器内的/etc/hostname 和 /etc/hosts
。但它在容器外部看不到,既不会在docker container ls
中显示,也不会在其他的容器的/etc/hosts
看到。
--dns=IP_ADDRESS
添加 DNS 服务器到容器的/etc/resolv.conf
中,让容器用这个服务器来解析所有不在 /etc/hosts
中的主机名。
--dns-search=DOMAIN
设定容器的搜索域,当设定搜索域为.example.com
时,在搜索一个名为host
的主机时,DNS 不仅搜索 host
,还会搜索host.example.com
。
这节内容一点多,未完待续~~~~