在我的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..."
没有成功。
任何帮助将不胜感激。
答案 0 :(得分:0)
我很确定… && 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
文件复制到相应文件夹中$HOST_ADDRESS
上的远程服务器。-这很明显,但是我不确定您在问题“ move docker-compose.yml和.env…”中的相关评论中使用过scp
或rsync
)
答案 1 :(得分:0)
对于遇到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)。