컨테이너를 조정할 때 여러 스크립트를 동시에 실행해야 하는 상황에 자주 직면하게 됩니다. 특히 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 언어와 해당 라이브러리가 설치되어 있지 않기 때문입니다.
어떻게든 병렬로 cmd
和 entrypoint
실행이 가능한가요? 감사해요.
도커파일
으아악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 중국어 웹사이트의 기타 관련 기사를 참조하세요!