标签: dind

如何在 Heroku 上的 Docker 中运行 Docker?

为什么?
我正在尝试创建一个通用解决方案,用于在 Heroku 上运行 docker-compose。我想通过使用 Heroku Button 部署来制作一键部署解决方案。这样,用户不需要任何 git、Heroku cli 和 docker 知识。

问题。
码头工人和码头工人守护进程只可当我设置stackcontainer。有一些 buildpack 可以为您提供 docker 和 docker-compose CLI,但没有 docker 守护程序,您将无法运行 docker 映像。所以构建包将不起作用。
随着stack设置为container我可以使用文件heroku.yml文章)。在那里我定义了我的流程。(它取代了Procfile。如果我仍然将 a 添加Procfile到我的项目中,它将什么也不做。)
我还可以定义一个Dockerfilethere 来构建我的 docker 映像。
但是,当我运行 docker 映像时,会弹出以下错误:

2019-02-28T15:32:48.462101+00:00 app[worker.1]: Couldn't connect to Docker daemon at http+docker://localhost - is it running?
2019-02-28T15:32:48.462119+00:00 app[worker.1]: 
2019-02-28T15:32:48.462122+00:00 app[worker.1]: If it's at a non-standard location, specify the URL with …
Run Code Online (Sandbox Code Playgroud)

daemon heroku docker dind

8
推荐指数
1
解决办法
1647
查看次数

GitLab Runner Docker Executor 中的缓存层 - Long Time DinD Container

我正在我的项目中研究 GitLab CI,我创建了一个图像来进行我的测试和构建。当我在 docker executor 中运行它时,每个作业都需要从一开始就下载图像。我需要缓存层和拉取的图像以改善我的构建和部署时间(5 分钟,使用不安全选项最多 1 分钟)。

我搜索了多个链接和多个文章,很多人都有同样的问题。但是,GitLab 团队并没有解决这个问题。而且社区没有可靠且安全的解决方案。下面的链接遵循同样的问题:

  1. 最佳答案不起作用:在 gitlab ci docker executor 中存储层
  2. 多次更改绕过问题,但没有任何效果:https : //blog.scottlogic.com/2018/02/09/multi-dind-ci-boxes.html
  3. 不使用挂载docker.sock 的讨论https : //gitlab.com/gitlab-org/gitlab-foss/issues/17769
  4. 使用挂载docker.sock 的讨论:https : //jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/
  5. 构建一个长时间的容器(不要和我一起工作):https : //medium.com/@tonywooster/docker-in-docker-in-gitlab-runners-220caeb708ca
  6. 不挂载docker.sock 的文档:https : //docs.gitlab.com/ce/ci/docker/using_docker_build.html#use-docker-in-docker-executor
  7. 卷配置示例:https : //github.com/ayufan/gitlab-ci-multi-runner/blob/master/docs/configuration/advanced-configuration.md#the-runnersdocker-section

最可能的方法(使用层缓存)是使用单独的容器并使运行器连接到它,并从中触发执行。这样,所有层都将位于“无限生命”容器中,并且不会在阶段结束时丢失所有缓存。考虑将docker.sock作为挂载公开的方法不仅不安全,而且在容器之间共享文件时也存在许多问题,因为它们都是兄弟姐妹,而不是共享卷的父子。

使用无限生命容器的方法如下所示:

docker run --privileged --name gitlab-dind -d --restart=always  docker:19-dind --storage-driver=overlay2
Run Code Online (Sandbox Code Playgroud)

或者

docker network create gitlab-runner-net

docker run --privileged --name gitlab-runner-dind --network gitlab-runner-net --publish=2375:2375 --publish=2376:2376 -d docker:19-dind …
Run Code Online (Sandbox Code Playgroud)

gitlab docker gitlab-ci gitlab-ci-runner dind

8
推荐指数
1
解决办法
1392
查看次数

为什么docker(dind)容器中的docker使用主机路径安装卷?

我在 docker 中设置了 docker 并尝试挂载文件夹。

假设我有那些我希望与他的父母共享的文件夹。在主机上,我在 /tmp/dind 中创建了一个名为foo. 主机启动容器1,启动容器2。这就是我想要的结果。

Host      | Container 1 | Container 2

/tmp/dind |  /tmp/dind2 | /tmp/dind3
      <------->     <------->
Run Code Online (Sandbox Code Playgroud)

相反,我得到

Host      | Container 1 | Container 2

/tmp/dind |  /tmp/dind2 | /tmp/dind3
      <------->
      <----------------------->
Run Code Online (Sandbox Code Playgroud)

代码在这里:

docker run --rm -it \
  -v /tmp/dind:/tmp/dind2 \
  -v /var/run/docker.sock:/var/run/docker.sock docker sh -c \
    "docker run --rm -it \
      -v /tmp/dind2:/tmp/dind3 \
      -v /var/run/docker.sock:/var/run/docker.sock \
      docker ls /tmp/dind3"
Run Code Online (Sandbox Code Playgroud)

这不输出任何内容,而下一个命令给出 foo 作为结果。我改变了安装的卷:

docker run --rm -it \
  -v /tmp/dind:/tmp/dind2 \ …
Run Code Online (Sandbox Code Playgroud)

docker dind

7
推荐指数
1
解决办法
5038
查看次数

Gitlab 管道失败:错误:准备失败:来自守护进程的错误响应:tomanyrequests

我有Harbor本地 docker 注册表,所有需要的图像都在那里,并将 GitLab 连接到 Harbour,所有图像都是从 Harbour 接收的,但是在 11 月 2 日之后,Docker 限制了拉取次数,似乎可以从 Docker 集线器拉取服务。是否可以使用 dind 服务从 Harbor 拉出?

管道输出:

Running with gitlab-runner 12.10.1 (ce065b93)
  on docker_runner_7 WykGNjC6
Preparing the "docker" executor
30:20
Using Docker executor with image **harbor**.XXX.XXXX.net/library/docker_maven_jvm14 ...
Starting service docker:**dind** ...
**Pulling docker image docker:dind** ...
**ERROR**: Preparation failed: Error response from daemon: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit (docker.go:198:2s)
Will be retried …
Run Code Online (Sandbox Code Playgroud)

gitlab gitlab-ci dind harbor

6
推荐指数
1
解决办法
5174
查看次数

我如何在使用 docker:dind 构建 docker 图像时缓存在 gitlab ci 中

我有一个gitlab-ci.yml这样的:

build and push docker image:
  stage: publish  
  variables:
    DOCKER_REGISTRY: amazon-registry
    AWS_DEFAULT_REGION: ap-south-1
    APP_NAME: sample-app
    DOCKER_HOST: tcp://docker:2375
  image: 
    name: amazon/aws-cli
    entrypoint: [""]
  services:
    - docker:dind 
  before_script:
    - amazon-linux-extras install docker
  script:
    - docker build -t $DOCKER_REGISTRY/$APP_NAME:master .
    - aws ecr get-login-password | docker login --username AWS --password-stdin $DOCKER_REGISTRY
    - docker push $DOCKER_REGISTRY/$APP_NAME:master
Run Code Online (Sandbox Code Playgroud)

这一步需要 19=8 分钟才能完成,因为 docker 镜像步骤没有被缓存。我希望能够缓存 before_scriptamazon-linux-extras install docker以及我正在构建的 docker 映像。我们在自己的 gitlab runners 上运行。我已经搜索了答案,但找到了 4 年前的解决方案。有没有办法解决这个问题?另外,是否会放弃docker:dind帮助?

caching docker gitlab-ci dind

6
推荐指数
2
解决办法
1638
查看次数

gitlab-ci docker-in-docker访问不安全的注册表

在配置gitlab-ci来构建docker镜像并将它们推送到我的gitlab不安全的注册表时,我遇到了一些错误.我的gitlab-ci.yaml如下:

stages:
  - build
  - deploy

variables:
  GIT_SUBMODULE_STRATEGY: recursive
  CONTAINER_IMAGE: XXX:$CI_COMMIT_REF_NAME

# The insecure-registry flag 
services:
  - docker:dind

build_container:
  image: docker:latest
  stage: build
  before_script:
    - echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" "$CI_REGISTRY" --password-stdin

  script:
    - docker build --pull -t $CONTAINER_IMAGE .
    - docker push $CONTAINER_IMAGE
Run Code Online (Sandbox Code Playgroud)

第一个错误是:

  $ docker login -u gitlab-ci-token -p $CI_JOB_TOKEN myregistry.gitlab.com
  WARNING! Using --password via the CLI is insecure. Use --password-stdin.
  Warning: failed to get default registry endpoint from daemon (Cannot connect 
  to the Docker daemon …
Run Code Online (Sandbox Code Playgroud)

gitlab docker gitlab-ci dind

4
推荐指数
1
解决办法
5089
查看次数

标签 统计

dind ×6

docker ×5

gitlab-ci ×4

gitlab ×3

caching ×1

daemon ×1

gitlab-ci-runner ×1

harbor ×1

heroku ×1