在阿里云容器服务中使用的编排文件是这么写的:
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: