如何让Docker Compose的alembic容器执行cd src后持续运行并支持终端操作?
解决Docker容器执行
cd src后立即停止的问题 问题原因
容器的生命周期和主进程绑定,主进程结束容器就会停止。你当前用command: bash -c "cd src"时,cd是bash的内置命令,执行完这个命令后bash进程直接退出,容器自然跟着停了。
解决方案
下面提供两种实用方法,既实现启动时自动进入src目录,又能让容器持续运行:
方法1:修改command让bash持续运行并停在src目录
在docker-compose.yaml的alembic服务配置中,把command改成:
command: bash -c "cd src && exec bash"
- 原理:
exec bash会替换当前的bash进程,让bash成为容器的主进程保持运行;同时cd src已经切换了工作目录,后续进入终端时默认就在src下。
方法2:在Dockerfile中设置默认工作目录(更推荐)
- 在你的Dockerfile中添加一行,指定容器启动后的默认工作目录:
WORKDIR /src
- 然后在docker-compose.yaml的alembic服务中,把command改成:
command: bash
- 原理:
WORKDIR会让容器启动时自动进入指定目录,bash作为主进程持续运行,容器不会停止,后续进入终端也直接在src目录下。
验证操作
容器启动后,用以下命令进入终端:
docker exec -it <你的alembic容器名或ID> bash
此时你会发现已经处于src目录下,可直接执行后续操作。
内容的提问来源于stack exchange,提问作者Альберт Александров
相关产品推荐
相关产品推荐

