2

我在 Gitlab 上使用 CI 管道构建 docker 映像以部署到 Raspbian。由于我的构建需要访问一些私有 NPM 包,我在 Docker 文件中包含以下行,该行使用存储在环境变量 $NPM_TOKEN 中的值创建令牌文件:

RUN echo //registry.npmjs.org/:_authToken=$NPM_TOKEN > ~/.npmrc

resin/raspberrypi3-node从我通常的图像( )构建时,这很好用。但是,我的一个容器是从armhf/ubuntu. 执行上述行时,构建失败并出现以下错误:

standard_init_linux.go:207: exec user process caused "no such file or directory"
The command '/bin/sh -c echo //registry.npmjs.org/:_authToken=$NPM_TOKEN >> ~/.npmrc' returned a non-zero code: 1

该构建docker build在我的开发机器(Windows 10)上运行良好,但不在 gitlab 管道中。

我尝试将我的 docker 和管道文件剥离到最低限度,并从路径中删除了环境变量和波浪号,但这对于 ubuntu(但不是树脂)图像仍然失败。

Dockerfile.test.ubuntu:

FROM armhf/ubuntu

RUN echo hello > world.txt

Dockerfile.test.resin:

FROM resin/raspberrypi3-node

RUN echo hello > world.txt

gitlab-ci.yml:

build_image:
  image: docker:git
  services:
  - docker:dind
  script:
  - docker build -f Dockerfile.test.resin . # Succeeds
  - docker build -f Dockerfile.test.ubuntu . # Fails
  only:
    - master

.sh我已经搜索了类似的问题,并且在运行包含CRLF组合的文件时看到了此错误报告。虽然我在 Windows 上开发,但我的 IDE(VS 代码)设置为使用LF,而不是CRLF,我已经检查了上述所有文件的合规性。

4

1 回答 1

2

就像在这里一样,尝试在 echo 参数中使用双引号:

RUN echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" > ~/.npmrc

首先,在您的 Dockerfile 中,RUN ls -alrth ~/检查目标文件夹的可访问性/存在性。

该线程中也报告了该错误(没有任何答案),并举例说明 Dockerfile的最终版本(如此处所示)使用 this .gitlab-ci.yml

OP bighairdave在评论中证实:

从@VonC给出的示例中复制了以下内容,并且它有效:

variables: 
  DOCKER_HOST: "tcp://docker:2375" 
  DOCKER_DRIVER: overlay2 
before_script: 
  - docker run --rm --privileged hypriot/qemu-register
于 2019-05-09T04:56:09.233 回答