在docker compose中使用命令关键字

在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脚

我想知道如何在docker-compose.yml中正确使用
命令
关键字

我正在尝试执行以下命令:

  • cd/等等
  • 等待。上海博士后:5432
  • 光盘
  • cd./api
  • 起纱
  • 我可以这样组织它

    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
    执行
    纱线
    ,而不是工作目录。这是否回答了您的问题?