我使用gitlab-ci和 docker:dind
作为服务 .
问题
我正在尝试在Gitlab-CI中运行 npm run build
,然后是 docker build
.
我可以通过这种方式在docker中使用docker构建:
这是我的跑步者 config.toml
:
$ cat /etc/gitlab-runner/config.toml
concurrent = 4
check_interval = 0
[[runners]]
name = "developers_gitlab_school-gitlab-runner-docker"
url = "https://school.domain.com"
token = "cd09f40c6a4....a44751fec795e35"
executor = "docker"
builds_dir = "/mnt/mesos/sandbox/builds"
cache_dir = "/mnt/mesos/sandbox/cache"
[runners.docker]
tls_verify = false
image = "docker:latest"
privileged = true
disable_cache = false
volumes = ["/cache"]
shm_size = 0
[runners.cache]
这是 .gitlab-ci.yml
的一个例子
image: docker:latest
# image: mcasimir/dind-node-build-runner:latest
variables:
DOCKER_DRIVER: overlay2
services:
- docker:dind
before_script:
- docker info
- docker --version
- docker login -u ${REGISTRY_USERNAME} -p ${REGISTRY_PASSWORD} ${REGISTRY_URL}
stages:
- build
# Job: Build
build_dev:
stage: build
script:
- docker build -t group/mail-server/dev:${CI_JOB_ID} .
only:
- dev
tags:
- docker
build_master:
stage: build
script:
- docker build -t domain/mail-server:${CI_JOB_ID} .
- docker build -t domain/mail-server:latest .
only:
- master
tags:
- docker
- 当我使用docker和npm的图像构建mcasimir/dind-node-build-runner:latest时,我有:
Cannot connect to the Docker daemon. Is the docker daemon running on this host?.
- 当我使用image
docker:latest
,docker-in-docker work fine 但我还需要npm .
问题:
因为 docker:latest
的Dockerfile不是公共的,并且因为我无法使用此图像中的 apt-get
,所以我想知道:
- 如果有办法让图像可以在gitlab-ci中运行 docker 和 npm ?
2 回答
因为它是一个基于阿尔卑斯山的图像,你没有apt-get,你有
apk
. 所以使用默认docker:latest
只需添加此apk --update add nodejs
:你已经准备好了dind和nodejs .
如果我们查看docker容器的source code,我们可以看到一个变量正在设置:
$DOCKER_HOST
,这就是你需要的只是在构建中添加export DOCKER_HOST='tcp://docker:2375'
或将DOCKER_HOST
设置为全局变量 . 然后你可以使用你想要的任何图像,而不仅仅是docker:latest
.