外部访问容器
容器可以运行网络应用, 要让外部可以访问, 可以通过 -P 或 -p 参数来指定端口映射
-
使用 -P 标记时, Docker会随机映射一个 49000~49900 的端口到内部容器开放的网络端口
-
-p 则可以指定要映射的端口, 在指定端口上只可以绑定一个容器, 格式有:
ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort # 映射所有接口地址 # 使用 hostPort:containerPort docker run -d -p 5000:5000 training/webapp python app.py # 映射到指定地址的指定端口 # 使用 ip:hostPort:containerPort, 格式指定映射使用一个特定地址,比如 localhost 地址 127.0.0.1 docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py # 映射到指定地址的任意端口 # 使用 ip::containerPort 绑定 localhost 的任意端口到容器的 5000 端口,本地主机会自动分配一个端口 docker run -d -p 127.0.0.1::5000 training/webapp python app.py # 还可以使用udp 标记来指定 udp 端口
查看映射端口配置
-
使用 docker port 来查看当前映射的端口配置, 也可以查看绑定的地址
docker port nostalgic_morse 5000 127.0.0.1:49155-
注意容器有自己的内部网络和ip地址(使用 docker inspect 可以获取所有的变量,Docker 还可以有一个可变的网络配置。)
-
-p 标记可以多次使用来绑定端口
docker run -d \ -p 5000:5000 \ -p 3000:80 \ training/webapp \ python app.py
-
容器互联
新建网络
-
创建一个新的Docker网络
docker network create -d bridge my-net # -d 参数指定Docker网络类型, 有bridge, overlay
连接容器
-
运行容器并连接到新建的 my-net网络
# 第一个容器 docker run -it --rm --name busybox1 --network my-net busybox sh # 第二个容器 docker run -it --rm --name busybox2 --network my-net busybox sh -
新终端输入命令
docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b47060aca56b busybox "sh" 11 minutes ago Up 11 minutes busybox2 8720575823ec busybox "sh" 16 minutes ago Up 16 minutes busybox1 -
通过ping 来证明 busybox1容器 和busybox2容器 是否建立联系
# 在busybox1容器里输入以下命令, 同理busybox2里也是一样使用 ping busybox2