도커 빌드에서 명령 출력이 표시되지 않는 이유는 무엇입니까?
내 스니펫Dockerfile
:
FROM node:12.18.0
RUN echo "hello world"
RUN psql --version
실행할 때docker build .
이 두 명령어는 캐시되지 않더라도 출력이 표시되지 않습니다.문서에는 다음과 같이 나와 있습니다.docker build
기본적으로 상세합니다.명령의 출력이 표시되지 않는 이유는 무엇입니까?전에 그들을 본 적이 있습니다.
빌드 중 출력:
=> [7/18] RUN echo "hello world" 0.9s
빌드가 완료된 후 표시되는 출력:
=> CACHED [6/18] RUN apt-get install postgresql -y 0.0s
=> [7/18] RUN echo "hello world" 6.4s
=> [8/18] RUN psql --version 17.1s
그Dockerfile
Debian 9를 기반으로 하는 노드:12.18.0에서 생성됩니다.
도커 버전 19.03.13, 빌드 4484c46d9d.
현재 표시된 출력은 도커와 함께 제공되는 기존 빌드 엔진을 대체하는 빌드 키트에서 나온 것입니다.다음을 사용하여 이 출력을 조정할 수 있습니다.--progress
옵션:
--progress string Set type of progress output (auto, plain, tty). Use plain to show container output
(default "auto")
추가 중--progress=plain
캐시에서 로드되지 않은 실행 명령의 출력을 표시합니다.이 작업은 다음을 설정하여 수행할 수도 있습니다.BUILDKIT_PROGRESS
변수:
export BUILDKIT_PROGRESS=plain
빌드를 디버깅할 때 단계가 이미 캐시된 경우 추가--no-cache
빌드로 이동하여 단계를 다시 실행하고 출력을 다시 표시합니다.
docker build --progress=plain --no-cache ...
빌드 키트를 사용하지 않으려는 경우 내보내기를 통해 이전 빌드 엔진으로 되돌릴 수 있습니다.DOCKER_BUILDKIT=0
당신의 껍질 안에, 예:
DOCKER_BUILDKIT=0 docker build ...
또는
export DOCKER_BUILDKIT=0
docker build ...
이 플래그를 사용하십시오.--progress=plain
끝나고build
.
예:
docker-compose build --progress=plain <container_name>
OR
docker build --progress=plain .
매번 이 플래그를 사용하지 않으려면 도커에게 다음을 수행하여 이 플래그를 사용하도록 영구적으로 알려줍니다.
export BUILDKIT_PROGRESS=plain
다음은 입력 시 공식 문서입니다.docker build --help
.
--progress string Set type of progress output (auto, plain, tty). Use plain to show container output (default "auto")
도커 20.10에서는 --no-cache 플래그도 사용해야 했습니다.그렇지 않으면 캐시된 출력이 표시되지 않습니다.
docker build --progress=plain --no-cache .
다음을 지정하는 대신--progress=plain
옵션을 사용하면 셸 구성에서 이 env 변수를 설정하여 "vmdk" 출력을 영구적으로 비활성화할 수도 있습니다.
export BUILDKIT_PROGRESS=plain
두 가지 일을 하라.
- 대신에
docker build .
이것을 사용합니다.
docker build . --progress=plain
- 임의 정크를 에 추가합니다.
RUN
모든 빌드를 명령합니다(이는 도커가 이전에 명령을 보지 못했다고 생각하도록 속여서 캐시된 버전을 사용하지 않습니다).
예를 들면.만약 당신의 명령이RUN ls
대신 이것을 사용합니다.RUN ls && echo sdfjskdflsjdf
(변경)sdfjskdflsjdf
구축할 때마다 다른 용도로).
작동하는 이유
저는 다른 답들을 시도해 보았는데 모두 문제와 불완전함을 제시했습니다.Docker에 다음과 같은 간단한 기능이 없다는 것은 매우 실망스러운 일입니다.--verbose=true
.
제가 결국 사용하게 된 것은 다음과 같습니다(황당하지만 효과가 있습니다).
의 출력을 보고 싶다고 가정합니다.ls
명령입니다. 작동하지 않습니다.docker build .
RUN ls
하지만 이것은 출력을 인쇄할 것입니다.docker build --progress=plain
:
RUN ls
이제 다시 시도해 보세요, 인쇄되지 않습니다! - 도커가 변경되지 않은 레이어를 캐시하기 때문입니다. 따라서 요령은 여기에 넌센스를 추가하여 매번 명령을 변경하는 것입니다.&& echo sdfljsdfljksdfljk
그리고 매번 헛소리를 바꾸는 것.docker build --progress=plain
:
# This prints
RUN ls && echo sdfljsdfljksdfljk
# Next time you run it use a different token
RUN ls && echo sdlfkjsldfkjlskj
그래서 매번 키보드를 으깨고 새로운 토큰을 생각해냅니다.바보같네요.(참고로 저는 다음과 같은 것을 시도했습니다.&& openssl rand -base64 12
무작위 문자열을 생성하지만 도커는 작동하지 않는 코드가 변경되지 않았다는 것을 인식합니다.
이 솔루션은 콘솔에 출력물을 인쇄하기 위한 정품 도커 지원보다 성능이 매우 떨어집니다.
오류가 다음과 같은 경우:
#7 0.584 /bin/sh: 1: /install.sh: not found
그것은 당신에게 오류가 1번 라인에 있다는 것을 알려줍니다. 당신은 윈도우 라인 끝에 부딪히고 있습니다.
나는 VS 코드를 사용하고 있었고, VS 코드를 사용하여 파일을 CRLF에서 LF로 변환하여 꽤 쉽게 해결했습니다.
편집기의 오른쪽 하단 모서리에 있는 CRLF 버튼을 클릭하여 파일을 저장합니다.
지금 이미지를 구축하면 모든 것이 잘 작동할 것입니다.
언급URL : https://stackoverflow.com/questions/64804749/why-is-docker-build-not-showing-any-output-from-commands
'programing' 카테고리의 다른 글
글로벌 임시 테이블 삭제 (0) | 2023.08.29 |
---|---|
Mocha 및 Node.js를 사용한 개인 기능의 장치 테스트 (0) | 2023.08.29 |
파워셸에서 콘다 환경을 활성화하는 방법은 무엇입니까? (0) | 2023.08.24 |
엑셀에서 두 숫자 사이에 있는 셀을 어떻게 세나요? (0) | 2023.08.24 |
도커에서 컨테이너를 나열하는 방법 (0) | 2023.08.24 |