>  기사  >  백엔드 개발  >  CMD와 ENTRYPOINT 스크립트가 서로 다른 이미지에 있는 경우 어떻게 동시에 실행할 수 있나요?

CMD와 ENTRYPOINT 스크립트가 서로 다른 이미지에 있는 경우 어떻게 동시에 실행할 수 있나요?

王林
王林앞으로
2024-02-09 08:57:321126검색

如果 CMD 和 ENTRYPOINT 脚本位于不同的映像中,如何同时运行它们?

컨테이너를 조정할 때 여러 스크립트를 동시에 실행해야 하는 상황에 자주 직면하게 됩니다. 특히 CMD와 ENTRYPOINT 스크립트가 서로 다른 이미지에 있는 경우 이를 동시에 실행하는 방법이 해결해야 할 문제가 됩니다. 이 경우 다단계 빌드를 사용하여 두 스크립트를 동시에 실행하는 목적을 달성할 수 있습니다. 먼저 CMD 및 ENTRYPOINT 스크립트를 모두 실행할 이미지에 스크립트를 작성해야 합니다. 그런 다음 Dockerfile의 다단계 빌드 기능을 사용하여 이 스크립트를 최종 이미지에 복사하고 컨테이너가 시작될 때 실행할 수 있습니다. 이러한 방식으로 CMD와 ENTRYPOINT 스크립트를 동시에 실행해야 한다는 필요성을 인식하여 컨테이너의 유연성과 확장성을 향상할 수 있습니다.

질문 내용

저는 docker 다단계 빌드를 사용하고 있으며 dockerized go 애플리케이션에 라이브 다시 로드 기능을 추가하려고 합니다. 두 번째 그림에는 자체 구성이 있는 entrypoint.sh이 있습니다.

이제 문제는 첫 번째 이미지의 cmd ["air", "-c", ".air.toml"]entrypoint ["/entrypoint.sh"] 脚本覆盖第二张图片,所以只有 entrypoint 启动了,cmd 명령이 실행되지 않는다는 것입니다.

이런 독특한 명령을 조합할 수는 없습니다

entrypoint ["/entrypoint.sh", "air", "-c", ".air.toml"]

두 번째 이미지에는 golang 언어와 해당 라이브러리가 설치되어 있지 않기 때문입니다.

어떻게든 병렬로 cmdentrypoint실행이 가능한가요? 감사해요.

도커파일

으아악

docker-compose.yml

from golang:1.17.2
copy . /go/src/sample

workdir /go/src/sample
run go install github.com/go-delve/delve/cmd/dlv@latest
run go install github.com/cosmtrek/air@latest
cmd ["air", "-c", ".air.toml"]

from eclipse-temurin:17-focal
copy entrypoint.sh /entrypoint.sh
run chmod +x /entrypoint.sh
entrypoint ["/entrypoint.sh"]

해결 방법

진입점(예: cmd)에 전달된 매개변수를 읽어보세요.

예를 들어 다음은 진입점 스크립트입니다. 매개변수에 액세스하고 매개변수를 사용하여 실행 등의 작업을 수행할 수 있습니다.

으아악

Docker 이미지에 필수 명령이 있는지 확인하세요.

으아악

이 기술적인 측면을 넘어서, go를 사용할 수 없는 상태에서 go 사용 가능 여부에 따라 cmd를 실행하고 싶다는 뜻인 것 같습니다. 그것은 불가능합니다. 실행하려는 항목과 해당 종속 항목을 사용할 수 있는지 확인해야 합니다.

1단계부터 에어 바이너리를 복사할 수도 있습니다. 이 같은.

으아악

사용하고 싶을 수도 있습니다 cgo_enabled=0 来编译 air.

그러나 코드가 변경되면 애플리케이션을 다시 컴파일해야 하므로 핫 리로드가 작동하려면 이미지에 Go 컴파일러가 있어야 한다고 가정합니다. 따라서 여기서는 다단계를 사용하지 말아야 할 수도 있습니다.

그렇습니다. 컨테이너의 핫 리로딩은 약간 안티 패턴처럼 보입니다. 컨테이너는 아티팩트를 배포하는 방법인 경우가 많습니다.

위 내용은 CMD와 ENTRYPOINT 스크립트가 서로 다른 이미지에 있는 경우 어떻게 동시에 실행할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제