>

Gitlab에서 CI 파이프 라인을 사용하여 Raspbian에 배포 할 도커 이미지를 빌드하고 있습니다. 내 빌드는 일부 개인 NPM 패키지에 액세스해야하기 때문에 환경 변수 $NPM_TOKEN에 저장된 값을 사용하여 토큰 파일을 만드는 다음 줄을 Docker 파일에 포함시킵니다.

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 파이프 라인에는 없습니다.

도커와 파이프 라인 파일을 최소한으로 제거하려고 시도했으며 경로에서 환경 변수와 물결표를 제거했지만 우분투 (수지가 아닌) 이미지에서는 여전히 실패합니다.

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 가 아닌  위의 파일을 모두 준수하는지 확인했습니다.

  • 답변 # 1

    여기에서와 같이 에코 인수에 큰 따옴표를 사용하십시오 :

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

    먼저 Dockerfile에서 RUN ls -alrth ~/ 를 수행하십시오.  대상 폴더의 접근성/존재 여부를 확인하려면

    이 오류는이 스레드에서 (응답없이)보고되었으며 여기에 표시된 Dockerfile의 최종 버전은이 .gitlab-ci.yml 를 사용하는 예입니다 .

    OP bighairdave는 의견을 확인합니다 :

    와이즈 비즈

    I copied the following from the example @VonC gave, and it worked:

    variables: DOCKER_HOST: "tcp://docker:2375" DOCKER_DRIVER: overlay2 before_script: - docker run --rm --privileged hypriot/qemu-register

  • 이전 javascript - 앵커 링크를 클릭 할 때 다른 페이지의 섹션으로 부드럽게 스크롤하는 방법은 무엇입니까?
  • 다음 WPF 바인딩을 사용하여 두 개의 명령 매개 변수 전달