![](/img/trans.png)
[英]docker-compose to a remote host using ssh fails in gitlab ci
[英]Run docker-compose up on remote host from Gitlab CI using ssh
在我的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自动部署mi服务。 这是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..."
没有任何成功。
任何帮助将不胜感激。
我非常确定… && exec \\$SHELL && …
无法工作(例如,参见exec内置的官方文档)。
但是,在修正引号之后,您的首次尝试似乎应该可以:您可以尝试以下操作吗?
- (…)
- 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
文件已复制到相应文件夹中位于$HOST_ADDRESS
.env
的远程服务器上.env
这很明显,但是我不确定您是否使用过scp
或rsync
在您的问题“中移动docker-compose.yml和.env…”中给出了相关评论)
对于遇到Gitlab Runner和SSH超时的任何人,这是唯一帮助我意识到并解决问题的线程。 正如stashco所评论的那样,对于cd
命令,您必须像这样使用它:
cd /path/to/docker-compose &> /dev/null
没有这个&> /dev/null
,跑步者每次都会停滞。 希望这对搜索Gitlab Runner超时的人有所帮助,就像我在这里陷入困境一样: 如何在CI / CD(Gitlab)上修复SSH Webpack构建超时 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.