docker - 使用 docker-compose 在 Gitlab CI 部署失败
问题描述
我之前通过以下方式从本地机器部署了我的应用程序:
> docker context create remote --docker "host=ssh://user@myhost"
> docker --context remote ps
> docker-compose --context remote build
> docker-compose --context remote up -d
这样就成功了,所有的Dockerfile都是对的。现在我想做同样的事情,但在 GitLab CI。这是我用于构建的 gitlab-ci.yml 文件:
image: docker:19.03.12
services:
- docker:dind
stages:
- build
install_dependencies:
stage: build
before_script:
- 'command -v ssh-agent >/dev/null || ( apt-get update -y && apt-get install openssh-client -y )'
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- echo "StrictHostKeyChecking no " > ~/.ssh/config
script:
- echo "Building deploy package"
- echo "$NPMRC" > ~/.npmrc
- apk add --no-cache docker-compose
- docker context create remote --docker "host=ssh://user@myhost"
- docker --context remote ps
- docker context use remote
- docker-compose --context remote build
- echo "Build successful"
一切正常docker-compose --context remote build
,当 --context arg 无法识别时,我不明白为什么。
$ docker context use remote
Current context is now "remote"
Warning: DOCKER_HOST environment variable overrides the active context. To use "remote", either set the global --context flag, or unset DOCKER_HOST environment variable.
remote
$ docker-compose --context remote build
Define and run multi-container applications with Docker.
Usage:
docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
docker-compose -h|--help
Options:
-f, --file FILE Specify an alternate compose file
(default: docker-compose.yml)
-p, --project-name NAME Specify an alternate project name
(default: directory name)
--verbose Show more output
--log-level LEVEL Set log level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
--no-ansi Do not print ANSI control characters
-v, --version Print version and exit
-H, --host HOST Daemon socket to connect to
--tls Use TLS; implied by --tlsverify
--tlscacert CA_PATH Trust certs signed only by this CA
--tlscert CLIENT_CERT_PATH Path to TLS certificate file
--tlskey TLS_KEY_PATH Path to TLS key file
--tlsverify Use TLS and verify the remote
--skip-hostname-check Don't check the daemon's hostname against the
name specified in the client certificate
--project-directory PATH Specify an alternate working directory
(default: the path of the Compose file)
--compatibility If set, Compose will attempt to convert keys
in v3 files to their non-Swarm equivalent
--env-file PATH Specify an alternate environment file
Commands:
build Build or rebuild services
config Validate and view the Compose file
create Create services
down Stop and remove containers, networks, images, and volumes
events Receive real time events from containers
exec Execute a command in a running container
help Get help on a command
images List images
kill Kill containers
logs View output from containers
pause Pause services
port Print the public port for a port binding
ps List containers
pull Pull service images
push Push service images
restart Restart services
rm Remove stopped containers
run Run a one-off command
scale Set number of containers for a service
start Start services
stop Stop services
top Display the running processes
unpause Unpause services
up Create and start containers
version Show the Docker-Compose version information
ERROR: Job failed: exit code 1
解决方案
要解决此问题,docker-compose 版本至少应为1.26.0
.
推荐阅读
- ios - 属性未在 super.init 调用中使用 MVVM 和便利 init 初始化
- prolog - 在 Prolog 中使用“或”
- python-3.x - 我用 Python 编写了重命名目录中的文件的代码,但出现错误:(有什么建议吗?
- lua - Lua:如何使 os.rename 和 os.remove 使用包含 unicode 字符的文件名?
- android-studio - Flutter:无法在 Android Studio 中创建 Flutter 项目或运行 Flutter 项目。(颤振工作正常)
- javascript - Java-script:去掉多余的小数位
- android - Delphi FMX 中的多线程
- r - 计算组之间的差异:用于多个计算的传播的替代方案
- javascript - 为 Web 压缩和调整图像大小
- apache-spark - AWS Glue 数据目录作为 EMR 上 Spark SQL 的 Metastore 的问题