如何在gitlab-ci-runner-docker中使用docker和npm

我用docker docker:dind作为服务使用gitlab-ci。

问题

我正在尝试在Gitlab-CI运行npm run build然后由docker build

我可以通过这种方式在Docker中使用docker构build:

这是我的跑步者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 
  1. 当我使用docker和npm的图像为我的生成mcasimir / dind-node-build-runner:最新我有:

     Cannot connect to the Docker daemon. Is the docker daemon running on this host?. 
  2. 当我使用图像docker:latest ,docker在docker工作正常,但我仍然需要npm。

题:

因为Docker的Dockerfile docker:latest是不公开的,因为我不能从这个图像中使用apt-get ,所以我想知道:

  • 如果有一种方法可以在gitlab-ci中运行docker和npm的映像?

因为这是一个阿尔卑斯山的形象,你没有apt-get,你有apk 。 所以默认的docker:latest只是添加这个apk --update add nodejs

 before_script: - apk --update add nodejs 

你已经准备好了dind和nodejs。

如果我们查看$DOCKER_HOST容器的源代码 ,我们可以看到一个variables被设置: $DOCKER_HOST ,这就是所有你需要的只是添加export DOCKER_HOST='tcp://docker:2375'作为你构build或设置的一个步骤DOCKER_HOST作为全局variables。 然后,你可以使用任何你想要的图像,而不只是docker:latest

 dockeralpine: image: alpine services: - docker:dind variables: DOCKER_HOST: "tcp://docker:2375" tags: - docker script: - apk --update add docker - docker ps dockerubuntu: image: ubuntu services: - docker:dind variables: DOCKER_HOST: "tcp://docker:2375" tags: - docker script: - apt update - apt install -yqq docker.io - docker ps