使用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托管/预览中不可能吗?
答案 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 中使用其他配置提供程序。