gpt4 book ai didi

amazon-web-services - 从 Gitlab-CI 构建 docker 镜像并将其推送到 Amazon AWS ECR

转载 作者:行者123 更新时间:2023-12-04 18:59:01 24 4
gpt4 key购买 nike

我在自己的机器上托管了一个私有(private) Gitlab。我将代码存储在 Gitlab 中,并希望从 Dockerfile 构建 Docker 镜像,然后将其推送到我的 Amazon ECR 注册表。不幸的是,这不起作用,因为它会引发错误:

Flag --email has been deprecated, will be removed in 1.13.
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
/dev/mapper/control: open failed: Operation not permitted
Failure to communicate with kernel device-mapper driver.
Check that device-mapper is available in the kernel.
Command failed
mount: permission denied
Could not mount /sys/kernel/security.
AppArmor detection and --privileged mode might break.
mkdir: cannot create directory '/sys/fs/cgroup/name=systemd': Read-only file system
mount: mount point /sys/fs/cgroup/name=systemd is not a directory
ln: failed to create symbolic link '/sys/fs/cgroup/systemd/name=systemd': Read-only file system

Timed out trying to connect to internal docker host.

gitlab-ci 代码如下所示:
stages:
- build

build_airflow:
stage: build
only: [master, develop]
image: gitlab/dind:latest
services:
- docker:dind
script:
- APP=airflow
- sh ./scripts/login-ecs.sh my_fancy_project

login-ecs.sh 脚本只是在执行 eval $(/usr/local/bin/aws ecr get-login --region eu-central-1) ,它应该将镜像登录到 ECR docker 注册表(来源: https://blog.madisonhub.org/gitlab-ci-build-how-to-login-to-ecr/)。

我找不到问题,所以希望你能帮助我。

先感谢您。

PS:如果我从 aws ecr get-login 执行命令在本地,它工作正常。所以它应该与gitlab做一些事情。我是否必须更改一些允许私有(private)注册表登录的配置?

最佳答案

背景:
您基本上是在尝试在默认情况下在 gitlab-ci 中不可用的 docker 容器中运行 docker 服务器。您可以通过运行以下命令检查 docker 客户端和服务器的状态:
docker version
在你的 gitlab-ci 脚本中。这通常是一个好主意,只是为了确保客户端和服务器正常运行。

运行此命令后,您会注意到 docker 服务器未运行,这就是您收到此错误的原因:Cannot connect to the Docker daemon. Is the docker daemon running on this host?
解决方案:
有几种方法可以解决您在 Gitlab 文档中详细描述的这个问题:
https://docs.gitlab.com/ce/ci/docker/using_docker_build.html

我们解决它的方法是使用 docker-in-docker executor这涉及更新您的 Gitlab Runner 配置并使用特殊的 docker-in-docker (dind) Docker Image 运行您的构建。 .

您需要更新运行器,使其在 中运行特权 模式。这是一个样本config.toml :

[[runners]]
url = "https://gitlab.com/ci"
token = TOKEN
executor = "docker"
[runners.docker]
tls_verify = false
image = "docker:latest"
privileged = true
disable_cache = false
volumes = ["/cache"]
[runners.cache]
Insecure = false

然后使用 docker:latest图片和 docker:dind服务。这是一个样本 gitlab-ci.yaml片段:
image: docker:latest

# When using dind, it's wise to use the overlayfs driver for
# improved performance.
variables:
DOCKER_DRIVER: overlay

services:
- docker:dind

before_script:
- docker info

build:
stage: build
script:
- docker version
- docker build -t my-docker-image .
- docker run my-docker-image /script/to/run/tests

另一种方法是设置单独的docker服务器,设置环境变量 DOCKER_TLS_VERIFYDOCKER_HOST这样您的 docker 客户端就可以安全地连接到服务器。

要启用 TLS,您需要遵循以下说明:
https://docs.docker.com/engine/security/https/

关于amazon-web-services - 从 Gitlab-CI 构建 docker 镜像并将其推送到 Amazon AWS ECR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42931874/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com