Docker启动报错:host network_mode与port_bindings不兼容如何解决
问题排查修复方案
错误根因
当Docker容器配置network_mode: host时,会直接共享宿主机的整个网络栈,容器内的服务监听的端口会直接绑定在宿主机对应端口上,不需要也不允许再配置ports端口映射规则,二者同时存在就会触发你遇到的报错。
修复方案
根据你的实际使用需求二选一即可:
方案1:保留host网络模式(推荐OpenVPN场景使用,网络性能更高)
OpenVPN场景通常需要更高的网络转发性能、或者需要直接操作宿主机网络栈,建议保留host模式,直接删除openvpn服务下的ports配置即可。
修改后的openvpn服务配置如下:
openvpn: # docker exec -it openvpn /bin/sh image: kylemanna/openvpn container_name: openvpn environment: DEBUG: '0' volumes: - ../../openvpn/scripts:/scripts - ../../data/output:/output network_mode: host cap_add: - NET_ADMIN command: /scripts/run-vpn.sh restart: always
注意:该方案下OpenVPN启动后会直接监听宿主机的1194/udp端口,你可以同步把
vpn-proxy服务的command里的172.17.0.1:1194改成127.0.0.1:1194,转发逻辑更稳定。
方案2:保留端口映射,删除host网络模式
如果你不需要用到host网络的特性,直接删除openvpn服务下的network_mode: host配置即可,原有的端口映射规则会正常生效,Docker会自动将宿主机1194/udp的流量转发到容器内的对应端口。
修改后的openvpn服务配置如下:
openvpn: # docker exec -it openvpn /bin/sh image: kylemanna/openvpn container_name: openvpn environment: DEBUG: '0' ports: - "1194:1194/udp" volumes: - ../../openvpn/scripts:/scripts - ../../data/output:/output cap_add: - NET_ADMIN command: /scripts/run-vpn.sh restart: always
内容的提问来源于stack exchange,提问作者Erraz Tone
相关产品推荐
相关产品推荐

