在启动容器时,如果不指定对应参数,在容器外部是无法通过网络访问容器内的网络应用和服务的。
可以通过-P或-p参数指定端口映射。当使用-P时,Docker会随机映射49000~49900的端口到容器内部的开放端口。
docker run -d -P training/webapp python app.py
docker ps -l
可以通过docker logs命令查看应用信息
docker logs -f nostalgic_morse
-p可以指定要映射的端口,支持3种方式:
ip:hostPort:containerPort
:映射指定地址的指定端口ip::containerPort
:映射到指定地址的任意端口hostPort:containerPort
:映射所有接口地址
将本地的5000端口映射到容器的5000端口
docker run -d -p 5000:5000 training/webapp python app.py
此时默认绑定本地所有接口上的所有地址,多次使用-p可以绑定多个端口。
docker run -d -p 5000:5000 -p 30000:80 training/webapp python app.py
仅映射localhost地址
docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py
绑定localhost的任意端口
docker run -d -p 127.0.0.1::5000 training/webapp python app.py
指定udp端口
docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
可以使用docker port
命令查看当前的映射端口和地址
docker port nostalgic_morse 5000
容器内部的网络可以通过docker inspect 容器ID
查看。
容器通信
容器连接会在源和接收容器之间创建一个隧道,接收容器可以看到源容器指定的信息。
首先创建源容器
docker run -d --name dbtraining/postgres
查看容器的名字
docker inspect -f "{{ .Name }}" aed
连接到db容器
docker run -d -P --name web --link db:db training/webapp python app.py
--link参数格式为--link name:alias
Docker在两个互联的容器之间建立安全隧道,而且不用映射端口到宿主机。Docker将通过两种方式为容器公开连接信息
环境变量
更新/etc/hosts
其中DB_开头的环境变量即是db容器提供的,同时docker还将db容器的ip写入web容器的/etc/hosts。