【问题标题】:Run docker-compose up on remote host from Gitlab CI using ssh使用 ssh 从 Gitlab CI 在远程主机上运行 docker-compose
【发布时间】:2019-05-09 08:44:35
【问题描述】:

在我的 docker-compose.yml 中,我使用了一些 .env 变量。就这样:

services:
  ms:
    image: 'template:latest'
    build:
      context: .
    restart: always
    ports:
      - '${PORT}:${PORT}'
    env_file:
      - .env

Docker 文档说,当 .env 和 docker-compose.yml 文件同时存在时,我必须从目录运行 docker-compose up 命令。

我想使用 GitLab CI 自动部署我的服务。这是 .gitlab-ci.yml 文件的一部分:

image: docker:latest

services:
  - docker:dind

...

run-deploy-prod:
  stage: deploy
  cache: {}
  before_script:
  # ssh configuration for alpine linux
  script:
    # move docker-compose.yml and .env to the location ~/docker_app/app
    - ssh $USER_NAME@$HOST_ADDRESS 'docker-compose -f '~/docker_app/app/docker-compose.yml' up --no-build -d'

问题: 如何准确地从 ~/docker_app/app 位置运行 docker-compose 以正确加载 .env 变量?

我尝试将 ssh 与 -T-tt-t 选项一起使用,例如:

ssh -T bob@foo "cd ~/docker_app/app && exec \$SHELL && docker-compose up..."

没有任何成功。

任何帮助将不胜感激。

【问题讨论】:

    标签: docker docker-compose continuous-integration gitlab alpine


    【解决方案1】:

    我很确定 … && exec \$SHELL && … 不能工作(例如,请参阅 exec builtin 上的官方文档)。

    不过,在修正引号之后,您的第一次尝试似乎应该没问题:您可以尝试以下方法吗?

    - (…)
    - ssh $USER_NAME@$HOST_ADDRESS "docker-compose -f ~/docker_app/app/docker-compose.yml up --no-build -d"
    

    或等效:

    - (…)
    - ssh $USER_NAME@$HOST_ADDRESS "cd ~/docker_app/app/ && docker-compose up --no-build -d"
    

    要不然,能不能把你得到的错误日志贴一下?

    (另外,您应该确保 docker-compose.yml.env 文件已复制到您的 remote 服务器的 $HOST_ADDRESS 的相应文件夹中。 - 这很明显,但我不确定您是否使用过scprsync,因为您在问题“移动 docker-compose.yml 和 .env ...”中给出了相关评论)

    【讨论】:

    • 事实证明,对于 GitLab CI,在 ~/ 以外的其他目录中运行 docker-compose 的正确语法是: ssh $USER_NAME@$HOST_ADDRESS 'cd '~/$REMOTE_DIR_NAME_PREFIX/$REMOTE_DIR_NAME/ ' >& /dev/null && docker-compose -f 'docker-compose.yml' up --no-build -d' 如果你在没有 >& /dev/null 的情况下运行 cd 命令,Runner 将简单地冻结,它会没有反应。
    【解决方案2】:

    对于遇到 Gitlab Runner 和 SSH 超时的任何人,这是帮助我意识到并解决问题的唯一线程。正如stashco 评论的那样,对于您的cd 命令,您必须像这样使用它:

    cd /path/to/docker-compose &> /dev/null

    没有这个&> /dev/null,跑步者每次都会失速。希望这有助于搜索 Gitlab Runner 超时的人,就像我在这里被难住一样:How to fix SSH Webpack build timeout on CI/CD (Gitlab)

    【讨论】:

      猜你喜欢
      • 2021-05-04
      • 2021-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-02
      • 1970-01-01
      • 1970-01-01
      • 2017-07-06
      相关资源
      最近更新 更多