我有一个我想要的GitLab管道:
我遇到的主要问题是这是有效的:
services:
- docker:dind
docker_test:
stage: docker_test
image: docker:latest
script:
- docker version
Run Code Online (Sandbox Code Playgroud)
输出按预期打印:
> gitlab-ci-multi-runner exec docker --docker-privileged docker_test
...
$ docker version
Client:
Version: 17.06.0-ce
...
Server:
Version: 17.06.0-ce
...
Build succeeded
Run Code Online (Sandbox Code Playgroud)
虽然这没有(安装步骤docker-ce省略):
services:
- docker:dind
docker_test:
stage: docker_test
image: ubuntu:latest << note change
script:
- docker version
Run Code Online (Sandbox Code Playgroud)
它失败了:
$ docker version
Client:
Version: 17.06.0-ce
API version: 1.30
Go version: go1.8.3
Git commit: 02c1d87
Built: Fri Jun 23 …Run Code Online (Sandbox Code Playgroud) 我想使用docker-docker设置与父Docker容器中的子docker容器建立联系.
假设我正在尝试连接到一个简单的Apache httpd服务器.当我在主机上运行httpd容器时,一切正常:
asnyder:~$ docker run -d -p 8080:80 httpd:alpine
asnyder:~$ curl localhost:8080
<html><body><h1>It works!</h1></body></html>
Run Code Online (Sandbox Code Playgroud)
但是当我从Docker-in-docker设置中执行相同操作时,我收到Connection refused错误:
asnyder:~$ docker run -d --name mydind --privileged docker:dind
asnyder:~$ docker run -it --link mydind:docker docker:latest sh
/ # docker run -d -p 8080:80 httpd:alpine
/ # curl localhost:8080
curl: (7) Failed to connect to localhost port 8080: Connection refused
Run Code Online (Sandbox Code Playgroud)
我没有运气就尝试过几次改装.指定0.0.0.0界面:
asnyder:~$ docker run -d --name mydind --privileged docker:dind
asnyder:~$ docker run -it --link mydind:docker docker:latest sh
/ # docker …Run Code Online (Sandbox Code Playgroud) 我正在运行一个 docker-in-docker 容器,它始终使用相同的几个图像。我想将它们预先拉到我的 dind 容器中,这样我就不必在启动时拉它们。我怎样才能实现这一目标?
我正在考虑按照以下方式建立自己的沉闷形象
FROM docker:18.06.1-ce-dind
RUN apk update && \
apk upgrade && \
apk add bash
RUN docker pull pre-pulled-image:1.0.0
Run Code Online (Sandbox Code Playgroud)
显然,上面的 Dockerfile 不会构建,因为 docker 在构建期间没有运行,但它应该给出我想要实现的目标。
我们当前的构建系统在 docker 容器(Docker in Docker)内构建 docker 镜像。我们的许多 Docker 构建都需要凭据才能从私有工件存储库中提取。
我们已经使用 docker Secrets 处理了这个问题。将秘密传递给 docker build 命令,并在 Dockerfile 中,在需要的地方引用 RUN 命令中的秘密。这意味着我们正在使用 docker buildkit。 本文对此进行了解释。
我们正在迁移到不同的构建系统(GitLab),并且管理员已在 Docker 中禁用 Docker(安全原因),因此我们将迁移到Kaniko进行 docker 构建。
Kaniko 似乎不像 docker 那样支持秘密。(没有命令行选项可以通过 Kaniko 执行器传递秘密)。
docker 构建所需的凭据存储在 GitLab 变量中。对于 DinD,您只需将这些变量作为秘密添加到 docker 构建中:
DOCKER_BUILDKIT=1 docker build . \
--secret=type=env,id=USERNAME \
--secret=type=env,id=PASSWORD \
Run Code Online (Sandbox Code Playgroud)
然后在 docker 中,使用秘密:
RUN --mount=type=secret,id=USERNAME --mount=type=secret,id=PASSWORD \
USER=$(cat /run/secrets/USERNAME) \
PASS=$(cat /run/secrets/PASSWORD) \
./scriptThatUsesTheseEnvVarCredentialsToPullArtifacts
...rest of build..
Run Code Online (Sandbox Code Playgroud)
如果没有 kaniko 执行器的 --secret 标志,我不确定如何利用 …
gitlab-ci docker-secrets docker-in-docker kaniko docker-buildkit
我读过Can Anybodyterpret docker.sock来了解/var/run/docker.sock它的作用,但它在 GitLab CI 的Use Docker socket binding中的使用让我感到困惑。
这是他们的注册命令示例gitlab-runner:
sudo gitlab-runner register -n \
--url https://gitlab.com/ \
--registration-token REGISTRATION_TOKEN \
--executor docker \
--description "My Docker Runner" \
--docker-image "docker:19.03.12" \
--docker-volumes /var/run/docker.sock:/var/run/docker.sock
Run Code Online (Sandbox Code Playgroud)
我看到可以从两个地方获取生成的容器docker。
/var/run/docker.sock。docker包含在基础映像中的二进制文件docker:19.03.12。这不是PATH冲突吗?我认为应该是其中之一,我可以docker从主机的 unix 套接字或基本映像中获得使用的能力。
我认为--docker-image应该是ubuntu:latest或者不带有 的东西docker,因为已经来自主机套接字PATH。docker或者,可以移除 docker 套接字安装座。
关于 的双重包含,实际上发生了什么docker?
unix-socket docker gitlab-ci gitlab-ci-runner docker-in-docker
尝试docker buildx与 GitLabs 共享运行器一起使用来构建可以在我的 Raspberry Pi 上运行的 Docker 映像。作业失败,说 git 不在 PATH 中,但 git 安装在image: docker:stable-git. 任何已知的修复程序或更好的方法来构建兼容 ARM64 的映像,而无需在 Raspberry Pi 本身上构建?(由于 CPU 使用率,RPi 在其上构建时变得无法使用)
deploy:
image: docker:stable-git
stage: deploy
services:
- docker:dind
before_script:
- export DOCKER_BUILDKIT=1
- export DOCKER_CLI_EXPERIMENTAL=enabled
- docker build --platform=local -o . git://github.com/docker/buildx
- mv buildx ~/.docker/cli-plugins/docker-buildx
script:
- docker buildx build --platform linux/amd64,linux/arm64 -t $CI_REGISTRY_IMAGE .
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
- docker push $CI_REGISTRY_IMAGE
Run Code Online (Sandbox Code Playgroud)
$ export DOCKER_BUILDKIT=1 …Run Code Online (Sandbox Code Playgroud) 根据 Docker 官方网站:https://docs.docker.com/engine/security/rootless/可以无根运行 Docker Daemon(没有 root 访问权限,没有 --privileged 标志)。
但是我确信从 Docker 容器内部运行时这将不起作用。如果没有 root 访问权限(--privileged),就无法进入modprobeDocker 容器。所以无法安装Docker无根脚本。
据说 Docker hub 中有一个官方镜像:docker:dind-rootlessimage here所以我将镜像拉入容器并通过 SSH 连接到容器中,但是在运行时出现以下错误dockerd
INFO[2020-07-17T20:50:32.355617100Z] Starting up dockerd needs to be started with root. To see how to run dockerd in rootless mode with unprivileged user, see the documentation
关于如何在另一个 Docker 容器中无根运行 Docker 守护进程有什么建议吗?我知道这可以用root来实现,但是有没有办法不用root呢?当我部署到 AWS fargate 时,我无法获得 root 访问权限,它不支持容器级别的特权访问。
我有一个运行 Flask 应用程序的 Docker 容器。当 Flask 接收到 http 请求时,我想触发一个新的临时 Docker 容器的执行,该容器一旦完成它必须做的事情就会关闭。
我读过应该避免使用 Docker-in-Docker,因此这个新容器应该作为同级容器在我的主机上运行,而不是在 Flask 容器内运行。
使用docker-py执行此操作的解决方案是什么?
我正在尝试创建一个简单的 GitLab CI,在其中使用 docker-compose up 启动一个容器,然后尝试使用 curl 访问它,最后使用 docker-compose down 将其拆除。docker-compose up 旋转得非常好,我可以使用 docker ps -a 看到容器,但是当我卷曲时,我得到“连接被拒绝”。
这是我的 gitlab-ci.yml
image: docker
services:
- docker:dind
before_script:
- apk add --update python py-pip python-dev && pip install docker-compose
- apk add --update curl && rm -rf /var/cache/apk/*
stages:
- test
test:
stage: test
script:
- docker-compose up -d
- docker ps -a
- curl http://localhost:5000/api/values
- docker-compose down
Run Code Online (Sandbox Code Playgroud)
这是跑步者的日志
Image for service testwebapp was built because it did not already exist. To …Run Code Online (Sandbox Code Playgroud) 我想从 Dockerfile 构建一个 docker 映像,并将该映像发布到 AWS ECR(Docker 注册表)。
为了成功,我需要能够访问docker build和docker push访问 Codebuild 容器,这是有问题的(在 docker 容器内安装 docker 会导致诸如 之类的错误Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?)。
请问要如何做这样的事情呢?有没有办法使用 codebuild 从 Dockerfile 构建 Docker 映像?
docker-in-docker ×10
docker ×9
gitlab-ci ×5
gitlab ×2
amazon-ecr ×1
aws-fargate ×1
curl ×1
dockerpy ×1
flask ×1
git ×1
kaniko ×1
networking ×1
python ×1
unix-socket ×1