无法在Azure托管的多容器Web应用程序中的unix:///var/run/docker.sock上连接到Docker守护程序

时间:2019-09-16 11:00:12

标签: azure docker-compose traefik

使用Azure Web Apps for Containers启动docker-compose配置。主要代理是Traefik,它需要访问docker API。容器正确启动。但是traefik容器无法访问docker API套接字文件。

traefik容器的docker-compose设置为:

    services:
       traefik:
          image: "traefik:v2.0"
          [...]
          volumes:
             - "/var/run/docker.sock:/var/run/docker.sock:ro"
          [...]

容器成功启动,并显示以下日志:

  

2019-09-16 10:40:35.040信息-从Docker集线器提取映像:   库/traefik:v2.0 2019-09-16 10:40:35.589信息-v2.0从   图书馆/ traefik 2019-09-16 10:40:35.810信息-摘要:   sha256:97c6da99b265de1c50e866ff66f927abb84659dcb7916c33e17623fc6969551c   2019-09-16 10:40:35.816信息-状态:图片为最新   traefik:v2.0 2019-09-16 10:40:35.835信息-成功提取图像,   耗时:0分钟0秒2019-09-16 10:40:35.871信息-   网站的启动容器2019-09-16 10:40:35.872信息-Docker运行   -d -p 40317:80 --name containertest3_traefik_1_6d1c6629 -e WEBSITES_ENABLE_APP_SERVICE_STORAGE = false -e   WEBSITE_SITE_NAME =容器测试3 -e WEBSITE_AUTH_ENABLED =假-e   WEBSITE_ROLE_INSTANCE_ID = 0 -e   WEBSITE_HOSTNAME = containertest3.azurewebsites.net -e   WEBSITE_INSTANCE_ID = 902eae0c51eb407ec9308de2a1c3fce2b35f53f6d148e328560acba2560930f0   -e HTTP_LOGGING_ENABLED = 1 traefik:v2.0 --api.insecure = true --providers.docker = true --providers.docker.exposedbydefault = false --entrypoints.web.address =:80 --entryPoints.web.forwardedHeaders .insecure

     

2019-09-16 10:40:36.215信息-从Docker集线器提取映像:   containous / whoami 2019-09-16 10:40:36.779信息-最新来自   包含/ whoami 2019-09-16 10:40:36.780信息-摘要:   sha256:09229ae40edb92e95b15e90fef46bfadab14fd1ec2232aca717a501741fcf391   2019-09-16 10:40:36.788信息-状态:图像是最新的   包含/ whoami:最新2019-09-16 10:40:36.790信息-拉图像   成功,花费时间:0分钟0秒2019-09-16   10:40:36.815 INFO-网站的启动容器2019-09-16   10:40:36.816信息-docker run -d -p 0:80 --name   containertest3_whoami_1_6d1c6629 -e   WEBSITES_ENABLE_APP_SERVICE_STORAGE = false -e   WEBSITE_SITE_NAME =容器测试3 -e WEBSITE_AUTH_ENABLED =假-e   WEBSITE_ROLE_INSTANCE_ID = 0 -e   WEBSITE_HOSTNAME = containertest3.azurewebsites.net -e   WEBSITE_INSTANCE_ID = 902eae0c51eb407ec9308de2a1c3fce2b35f53f6d148e328560acba2560930f0   -e HTTP_LOGGING_ENABLED = 1含糊/糊涂

     

2019-09-16 10:40:47.048信息-已启动多容器应用程序2019-09-16   10:40:47.099信息-向容器发起预热请求   用于站点containertest3的containertest3_traefik_1_6d1c6629 2019-09-16   10:40:47.101信息-容器containertest3_traefik_1_6d1c6629   站点containertest3已成功初始化并可以提供服务   请求。

但是,在错误日志中,Traefik无法访问docker api,因此无法正常工作:

  

2019-09-16T10:40:47.505909459Z time =“ 2019-09-16T10:40:47Z” level = error   msg =“ Provider连接错误无法在以下位置连接到Docker守护程序   unix:///var/run/docker.sock。 docker守护程序是否正在运行?,重试   在1.080381816s中“ providerName = docker

     

2019-09-16T10:40:48.585335458Z time =“ 2019-09-16T10:40:48Z” level =错误   msg =“无法检索Docker客户端和服务器的信息   主机:无法在以下位置连接到Docker守护程序   unix:///var/run/docker.sock。泊坞窗守护程序正在运行吗?”

Traefik容器的最终错误: “无法在unix:///var/run/docker.sock上连接到Docker守护程序。Docker守护程序正在运行吗?”

有什么想法如何在Azure应用程序环境中解决此错误?在App容器的Azure托管/预览中不可能吗?

2 个答案:

答案 0 :(得分:0)

根据您提供的消息,错误是您无法使用如下卷:

volumes:
  - "/var/run/docker.sock:/var/run/docker.sock:ro"

设置环境变量WEBSITES_ENABLE_APP_SERVICE_STORAGE=true时,应按以下方式配置持久卷:

volumes:
  - ${WEBAPP_STORAGE_HOME}/site/wwwroot:/var/www/html
  - ${WEBAPP_STORAGE_HOME}/phpmyadmin:/var/www/phpmyadmin
  - ${WEBAPP_STORAGE_HOME}/LogFiles:/var/log

更多详细信息,请参见Use persistent storage in Docker Compose

或使用Azure存储帐户,如下所示:

volumes:
  - <custom-id>:<path_in_container>

更多详细信息,请参见Serve content from Azure Storage in App Service on Linux。但是通过这种方式,您需要注意以下注意事项:

  

将网络应用程序中的现有目录链接到存储帐户将   删除目录内容。如果您要为   现有应用,请先备份您的应用及其内容   开始。

答案 1 :(得分:0)

Azure Web App 服务不允许从 docker.sock 读取。 如果要在 Azure 应用服务中运行多容器,则需要在 traefik 中使用其他配置提供程序。