Docker容器访问外网有多种方式,下面我将详细介绍几种常见的方法:
这是Docker的默认配置,容器通过主机的NAT访问外网:
# 查看容器网络配置
docker inspect <container_id> | grep IPAddress
# 测试容器内访问外网
docker exec -it <container_id> ping www.google.com
原理:
- Docker创建了一个虚拟网桥docker0
- 容器通过docker0
桥接网络连接到主机
- 主机通过iptables NAT规则转发容器流量
让容器直接使用主机的网络栈:
docker run --network host <image_name>
特点: - 容器直接使用主机IP和端口 - 网络性能最好 - 安全性较低(容器有完全的网络访问权限)
docker network create --driver bridge my_bridge
docker run --network my_bridge <image_name>
docker network create --subnet=172.18.0.0/16 my_net
docker run --network my_net --ip 172.18.0.10 <image_name>
docker run -e http_proxy=http://proxy.example.com:8080 \
-e https_proxy=http://proxy.example.com:8080 \
<image_name>
docker run -e ALL_PROXY=socks5://proxy.example.com:1080 <image_name>
docker network create -d macvlan \
--subnet=192.168.1.0/24 \
--gateway=192.168.1.1 \
-o parent=eth0 \
my_macvlan
docker network create -d ipvlan \
--subnet=192.168.1.0/24 \
--gateway=192.168.1.1 \
-o parent=eth0 \
my_ipvlan
检查步骤:
1. 确认主机可以访问外网
2. 检查DNS配置:docker run --dns 8.8.8.8 <image_name>
3. 检查iptables规则:iptables -L -n -v
4. 检查Docker守护进程配置:/etc/docker/daemon.json
# 临时指定DNS
docker run --dns 8.8.8.8 --dns 8.8.4.4 <image_name>
# 永久配置(修改/etc/docker/daemon.json)
{
"dns": ["8.8.8.8", "8.8.4.4"]
}
--network none
--privileged
模式根据您的具体需求和安全要求,可以选择最适合的网络配置方式。