0913_docker学习(9)

242 阅读2分钟

docker 还有另外两个默认的网络叫做 hostnone, 就跟它的名字一样,一种是直接使得容器实例与主机处于同一段的网络,另外一种就是隔绝外部网络。


# 跟主机处于同一段的网络
docker run --network host alpine:3.8 ip -o addr

# 没有外部网络连接

docker run --network none alpine:3.8 ip -o addr


但是无论哪种网络模式,都应该会有 127.0.0.1(环回地址)这个 ip 地址。

端口转发

docker 的 bridge 网络采用的是 NAT 转换技术,能够使得容器实例通过自身主机(a)能够从互联网(如果能联网)中获取数据,但是互联网中的其他主机只能感知到主机(a),并不能感知到容器实例。

那么就必须把从其他主机的请求给转发到主机(a)上面的对应的容器实例上,为了解决这个问题,Docker 发明了一个术语叫做 Node publishing (不知道啥意思)。 反正就是将主机 a 上面的某个端口接收到的信息,转发到容器实例的某个端口之上,同样容器实例的向对应端口的信息,转发到主机(a) 上面的对应端口之上。

# 使用 -p 参数
如果不是 3001:3001 而是 3001,那么容器自己会创建一个随机端口
# docker run -p 3001:3001 alpine:3.8 sleep 300 &
docker run -p 3001 alpine:3.8 sleep 300 &

# 主机端口 8000 容器端口 3002
docker run -p 8000:3002 alpine:3.8 sleep 300 &

# 默认是 tcp 协议, 可以指定协议

docker run -p 3003/udp alpine:3.8 sleep 300 &

# 一个容器可以多端口绑定 
# 另外 
docker run -p 3004 -p 3005:3005 -p 3006/udp alpine:3.8 sleep 300 &

# 默认绑定主机 ip 是 0.0.0.0, 可以指定特定 ip

docker run -p 127.0.0.1:8002:3007/tcp -p 127.0.0.1:8003:3008 alpine:3.8 sleep 300 &

image.png