Docker中Bot容器无法通过服务名访问Chrome容器的问题解决
解决Docker中Bot容器无法通过服务名访问Chrome容器的问题
问题描述
使用Surfshark VPN容器让Chrome容器通过VPN访问互联网,配置如下:
version: '3' services: bot: restart: always build: . ports: - "1111:1111" chrome: image: browserless/chrome network_mode: service:surfshark surfshark: image: ilteoood/docker-surfshark container_name: surfshark environment: - SURFSHARK_USER=$SURFSHARK_USER - SURFSHARK_PASSWORD=$SURFSHARK_PASSWORD - SURFSHARK_COUNTRY=es - CONNECTION_TYPE=udp cap_add: - NET_ADMIN devices: - /dev/net/tun restart: unless-stopped dns: - 1.1.1.1
尝试从Bot容器通过服务名chrome访问Chrome容器时,执行wget http://chrome报错wget: bad address 'chrome'。
问题原因
当Chrome容器设置network_mode: service:surfshark时,它会共享Surfshark容器的网络命名空间,意味着Chrome容器没有独立的IP地址,Docker Compose也不会为它创建chrome服务名对应的DNS解析条目,因此Bot容器无法通过chrome服务名找到它。
解决方案
方法1:通过Surfshark服务名/容器名访问Chrome
由于Chrome和Surfshark共享网络,Chrome的服务端口直接绑定在Surfshark容器的网络上,因此Bot容器可以直接使用Surfshark的服务名或容器名访问Chrome。
假设browserless/chrome默认监听端口为3000(若有修改则对应调整),在Bot容器内执行:
wget http://surfshark:3000
方法2:自定义网络并保留Chrome服务名访问(更灵活)
若希望继续使用chrome服务名访问,可以创建自定义桥接网络,让所有容器加入该网络,并调整Surfshark配置以允许子网流量通过VPN:
修改后的docker-compose.yaml配置:
version: '3' networks: vpn-shared-net: driver: bridge ipam: config: - subnet: 172.25.0.0/16 services: bot: restart: always build: . ports: - "1111:1111" networks: - vpn-shared-net chrome: image: browserless/chrome networks: - vpn-shared-net depends_on: - surfshark # 配置Chrome通过Surfshark代理访问网络 environment: - HTTP_PROXY=http://surfshark:3128 - HTTPS_PROXY=http://surfshark:3128 surfshark: image: ilteoood/docker-surfshark container_name: surfshark environment: - SURFSHARK_USER=$SURFSHARK_USER - SURFSHARK_PASSWORD=$SURFSHARK_PASSWORD - SURFSHARK_COUNTRY=es - CONNECTION_TYPE=udp # 允许自定义子网的流量通过VPN - ADDITIONAL_SUBNETS=172.25.0.0/16 cap_add: - NET_ADMIN devices: - /dev/net/tun restart: unless-stopped dns: - 1.1.1.1 networks: vpn-shared-net: ipv4_address: 172.25.0.2 # 开启HTTP代理端口,供Chrome使用 ports: - "3128:3128"
配置完成后,Bot容器即可通过chrome服务名访问Chrome:
wget http://chrome:3000
内容的提问来源于stack exchange,提问作者Роман Сергеевич
相关产品推荐
相关产品推荐

