2017-02-14 1 views
1

2 개의 실행 가능 바이너리가 들어있는 최소 도커 이미지 (FROM scratch)를 만들려고합니다. 둘 다 Go로 빌드 된 바이너리입니다. 진입 점은 첫 번째 진입 점으로 설정됩니다. 이미지의 일부 데이터를 가져 와서 환경 변수를 사용하여 변환하고, 두 번째 이진을 실행하는 새 프로세스를 시작하고 생성 된 프로세스의 입력으로 데이터를 파이프합니다.이미지가 처음부터 빌드 된 도커 컨테이너에 새 프로세스를 만듭니다.

FROM scratch 
COPY bin /opt/my-app 
ENTRYPOINT ["/opt/my-app/first", "--run", "/opt/my-app/second"] 

이 이미지를 Mac에서 만들면 모든 것이 잘됩니다. 하지만 리눅스를 실행하는 서버를 만들 때 첫 번째 프로세스가 두 번째 프로세스를 시작할 수 없습니다. "fork/exec/opt/my-app/second : no such file or directory"오류로 실패합니다. 그러나 "두 번째"바이너리가 존재합니다. 두 경우 모두 docker 엔진 1.13.1이 사용됩니다.

부모 이미지가 scratch에서 debian:jessie으로 변경된 경우에도 적용됩니다.

알지 못하는 스크래치 이미지에는 제한 사항이 있습니까?

+0

바이너리가 정적으로 링크되어 있습니까? 스크래치 이미지를 사용하면 libc (또는 공유 라이브러리)가 없을 것입니다. 데비안에서 정상적으로 작동하면 바이너리가 정적으로 링크되지 않은 것으로 의심됩니다. 이는 정상적인 기본값입니다. CGO_ENABLED = 0 시도해보십시오. -a -installsuffix cgo 여기에 보이는대로 http://www.blang.io/posts/2015-04_golang-alpine-build-golang-binaries-for-alpine-linux/ – foo

+0

힌트를 보내 주셔서 감사합니다. CGO_ENABLED = 0으로 설정하면 도움이됩니다. 답변으로 게시하면 기꺼이 받아 들일 수 있습니다. :) –

답변

관련 문제