在docker compose中使用命令关键字
我想知道如何在docker-compose.yml中正确使用在docker compose中使用命令关键字,docker,docker-compose,Docker,Docker Compose,我想知道如何在docker-compose.yml中正确使用命令关键字 我正在尝试执行以下命令: cd/等等 等待。上海博士后:5432 光盘 cd./api 起纱 我可以这样组织它 command: ["./wait-for-it/wait-for-it.sh", "postgres:5432", "--", "yarn", "start"] 然而,我不知道如何cd到api之前做纱线 关于如何正确构造命令,您有什么想法吗?管理像这样复杂的启动命令的绝对最佳方法是(a)将它们编写为shell脚
命令
关键字
我正在尝试执行以下命令:
command: ["./wait-for-it/wait-for-it.sh", "postgres:5432", "--", "yarn", "start"]
然而,我不知道如何cd到api之前做纱线
关于如何正确构造命令,您有什么想法吗?管理像这样复杂的启动命令的绝对最佳方法是(a)将它们编写为shell脚本,然后(b)将它们烘焙到Docker映像中 例如,我可以将您编写的启动过程重新解释为伪代码,如:
1. cd into the wait-for-it directory and run the wait-for-it script
2. Do the thing the container was originally going to do
我可以将其转换为shell脚本:
#/垃圾箱/垃圾箱
(cd/app/wait-for-it&./wait-for-it.sh“$DB\u主机\u端口”)
执行官“$@”
然后我可以将该脚本用作图像中的入口点。它在子shell中运行cd
命令,以便在下一行返回原始目录;exec“$@”
行运行作为命令传递的内容。Dockerfile
的结尾如下所示:
COPY entrypoint.sh/app
运行chmod+x entrypoint.sh
WORKDIR/app/api
入口点[“/app/ENTRYPOINT.sh”]
CMD[“纱线”,“开始”]
然后,我根本不需要在docker compose.yml
中手动覆盖这些设置;我唯一需要做的就是将数据库位置作为环境变量提供
版本:“3”
服务:
myapp:
生成:。
环境:
-DB_HOST_PORT=postgres:5432
端口:
- '3000:3000'
博士后:
图片:博士后:12
如果我想运行其他命令:
docker-compose run myapp yarn migrate
它仍然等待数据库可用,但是运行备用命令。
不是问题,你有一个裸露的<代码> CD <代码>在中间?NOP,它把我带回主目录,使CeleRead有趣,TIL。你知道命令的哪一部分失败了吗?它在哪个容器中运行?您也可以尝试将--cwd
标记添加到纱线。进一步编辑,目前没有失败,我只是缺少了一部分命令,从/api
执行纱线
,而不是工作目录。这是否回答了您的问题?