Я использую конвейеры CI на Gitlab для создания образов докеров для развертывания в 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.
Я попытался сократить файлы докера и конвейера до минимума и удалил переменную окружения и тильду из пути, но это все равно не помогло образу 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 Code) настроена на использование LF
, а не CRLF
, и я проверил все перечисленные выше файлы на соответствие.