我在docker-compose.yml
中有ngnix服务和网络的基本配置version: '3'
services:
nginx:
build: ./docker/nginx
networks:
eznet:
ipv4_address: 172.21.20.30
ports:
- 80:80
volumes:
- ./logs/nginx/:/var/log/nginx
- ${APP_PATH}:/var/www/
networks:
eznet:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.21.20.0/24
在Linux上,docker-compose将在172.21.20.x子网中创建虚拟网络接口,并在172.21.20.30上访问ngnix。这对我的开发团队非常有用,我们正在使用它来组织多个项目。
在运行docker-compose up -d
之后的Windows(基于hyperV的Docker for Windows)上,没有创建新的网络接口。
我尝试更改Docker deamon设置,我添加了
{
"bridge": "none"
}
守护进程配置,它应该阻止docker创建其默认网络(DockerNAT)并强制它将所有网络暴露为主机上可见的接口,但没有任何改变。
有没有办法在Docker for Windows上公开Docker网络?
答案 0 :(得分:2)
无法从主机访问适用于Windows / Mac容器网络的Docker。
Docker在HyperV中运行的Alpine Linux虚拟机的网桥上创建网络。这些网络不会暴露给VM主机。对容器的唯一网络访问是通过映射的TCP或UDP端口。
有一些方法可以设置可以访问的VM,但它通常涉及使用自定义VM而不是Docker for Windows / Mac(或Docker Machine),因为Docker虚拟机不是非常可定制的(它们的目标是易于使用/设置)。
使用到主机的网络路由创建Docker VM。
为VM创建"external network switch"。
在VirtualBox上,桥接适配器可以。也可以通过仅主机网络适配器进行设置,但由于大多数容器需要访问Internet,因此可能会有点复杂,因此需要第二个适配器。
Ping Docker VM
您应该能够从主机ping主VM的主界面,反之亦然
C:\> ping 192.168.98.30
确保在Docker VM中打开IP路由
将IP转发添加到sysctl(Debian上的/etc/sysctl.d/99-sysctl.conf
)
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
然后重新加载sysctl文件以获取配置
sysctl --system
通过VM添加路由到私有Docker网络
现在告诉您的VM主机如何访问Docker网络。
route -p ADD 172.21.20.0 MASK 255.255.255.0 192.168.98.30
我使用Vagrant/Debian/VirtualBox执行此操作主要是在HyperV术语关闭时道歉。我的Vagrant setup更进了一步,创建了一个连接到仅主机网络的整个网桥,以便容器可以连接到网桥并直接从主机访问。