You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure容器实例中qmcgaw/gluetun容器无法正常运行求助

排查Azure容器实例中Gluetun容器Waiting状态问题

以下是针对你的问题的排查步骤和解决方案:

1. 先获取容器的详细日志和启动事件

容器状态显示waiting但无日志,首先用Azure CLI获取容器的日志和启动事件,这是排查的核心:

  • 获取VPN容器日志:
    az container logs --resource-group <你的资源组名> --name <容器组名> --container-name vpn-username
    
  • 获取容器组的启动事件(能看到容器启动失败的具体原因):
    az container show --resource-group <你的资源组名> --name <容器组名> --query 'containers[*].instanceView.events' -o table
    

2. 检查cap_add: NET_ADMIN在ACI中的支持

Gluetun必须依赖NET_ADMIN权限才能创建VPN隧道。虽然Docker Compose部署到ACI时支持cap_add,但需要确认容器组是否正确应用了该配置:

  • 若通过docker compose up部署到ACI,确保Docker Desktop的Azure集成已正确配置;
  • 若通过Azure门户或ARM模板部署,需显式在容器的安全上下文里添加NET_ADMIN能力。

3. 修正network_mode: service:vpn-username的配置

Azure容器实例(ACI)中,同一个容器组内的容器默认共享网络命名空间,不需要使用network_mode: service:语法。这个配置在本地Docker有效,但在ACI中可能导致依赖容器无法正确初始化:

  • 删除script-runner-username服务中的network_mode: service:vpn-username配置;
  • 保留depends_on: vpn-username确保脚本容器在VPN容器启动后再运行。

4. 调整资源限制

ACI的资源限制是硬限制,Gluetun启动需要足够的CPU和内存资源,你的当前配置(0.5CPU/1G内存)可能不足:

  • 将vpn-username的资源限制调整为:
    deploy:
      resources:
        limits:
          cpus: '1.0'
          memory: 1536M
    
  • 资源不足会导致容器无法启动,处于waiting状态。

5. 验证ProtonVPN的网络连通性

Azure环境下,容器需要能访问ProtonVPN的服务器:

  • 确认容器组使用的是公共网络(默认配置),出站流量无限制;
  • 若使用自定义VNET,需确保NSG允许出站到UDP 1194、TCP 443等ProtonVPN常用端口;
  • 检查ProtonVPN的认证信息:OpenVPN密码需使用ProtonVPN账户的应用密码,而非主账户密码(本地正常的话这条可能没问题,但需再确认)。

6. 检查端口映射的必要性

你映射了UDP 1194端口,但Gluetun作为客户端连接VPN时,不需要暴露这个端口给外部。移除端口映射可能避免潜在的网络冲突:

  • 删除vpn-username服务中的ports: - "1194:1194/udp"配置。

修改后的Docker Compose示例

version: '3.8'
x-azure-settings:
  acr-credentials:
    - server: <acr-server-name>.azurecr.io
      username: <acr-username>
      password: <acr-password>
services:
  vpn-username:
    image: qmcgaw/gluetun
    deploy:
      resources:
        limits:
          cpus: '1.0'
          memory: 1536M
    cap_add:
      - NET_ADMIN
    environment:
      - VPNSP=protonvpn
      - OPENVPN_USER=<vpn-username>
      - OPENVPN_PASSWORD=<vpn-password>
      - SERVER_COUNTRIES=Netherlands

  script-runner-username:
    image: <acr-server-name>.azurecr.io/<your-image-name>:latest
    deploy:
      resources:
        limits:
          cpus: '0.1'
          memory: 100M
    depends_on:
      - vpn-username
    command: python fetchip.py

内容的提问来源于stack exchange,提问作者Ak99mProgrammer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 11:02:04