在阿里云容器服务中使用的编排文件是这么写的:
version: '3.2' services: cache-service-default: image: microsoft/aspnetcore:2.0 depends_on: - dotnet-publish volumes: - cache-service:/app command: bash -c "cd /app && dotnet Cnblogs.Cache.WebApi.dll" dotnet-publish: image: cache-service:latest volumes: - cache-service:/app/Cnblogs.Cache.WebApi/publish volumes: cache-service:
(注:上面的cache-service是我们自己的镜像)
用这个编排文件部署“应用”总是失败:
事件中的错误日志如下:
Failed to start service cache-service-default_dotnet-publish, 1 tasks failed: finished
其中有2个容器,一个能正常启动,一个不能正常启动:
而在自己的电脑上在docker-compose.yml中使用同样的“编排”, docker-compose up 可以正常运行。
请问如何解决这个问题?
问题与dotnet-publish这个容器启动后就停止有关(自己运行docker-compose的体现是: cacheservice_dotnet-publish_1 exited with code 0 ),dotnet-publish这个容器的目的是通过volumes共享文件给另外一个容器,所以停止并没有影响。但对于阿里云容器服务来说,只要其中一个服务对应的容器没有处于运行状态,整个应用就失败。
在stackoverflow上(Docker-Composer exited with code 0)找到了很简单的的解决方法,给dotnet-publish容器添加 tty: true 配置,让这个容器启动后不退出运行即可。
version: '3.2' services: cache-service-default: image: microsoft/aspnetcore:2.0 depends_on: - dotnet-publish volumes: - cache-service:/app command: bash -c "cd /app && dotnet Cnblogs.Cache.WebApi.dll" dotnet-publish: image: cache-service:latest volumes: - cache-service:/app/Cnblogs.Cache.WebApi/publish tty: true volumes: cache-service: