특정 도커 이미지(alpine 기반)에 대해 일부 사용자 지정 코드를 실행하고 싶습니다.뒤쪽에컨테이너가 시작됩니다. 코드를 컨테이너 안에 넣어서 사용하기 쉽고 모든 것이 독립적이기를 원합니다. 일반적으로 컨테이너의 진입점이나 명령을 재정의하지만 이 경우에는 불가능합니다.
내 솔루션:
docker-compose.yml
volumes:
- ./entrypoint-custom.sh:/entrypoint-custom.sh:ro
entrypoint: /entrypoint-custom.sh # override Dockerfile default of '/someapp'
entrypoint-custom.sh
#!/bin/sh
# custom pre-start code
# ...
# custom post-start code
(sleep 10; echo I run after start) & \
exec /someapp "$@" # '/someapp' is container's actual executable, from image's original ENTRYPOINT
이것은 작동합니다. 그리고 exec
수단 신호(예: 로그 회전)를 사용하면 /someapp
실행 파일에 올바르게 전송됩니다. 컨테이너의 로그( docker logs someapp
)를 확인하면 애플리케이션이 평소처럼 시작되고 잠시 후 지연된 작업이 출력에 인쇄되는 것으로 표시됩니다.
이론적으로는 echo
이를 내가 원하는 출시 후 논리로 대체할 수 있습니다.
걱정:
- 컨테이너를 실행하고 실행해도
ps
여전히 표시됩니다12 root 0:00 [entrypoint-cust]
. 결과가 확실하지 않습니까? - 이 접근 방식으로 인해 의도하지 않은 결과가 발생합니까?