기본 프로세스가 시작된 후 실행할 스크립트를 도커 컨테이너에 포함

기본 프로세스가 시작된 후 실행할 스크립트를 도커 컨테이너에 포함

특정 도커 이미지(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]. 결과가 확실하지 않습니까?
  • 이 접근 방식으로 인해 의도하지 않은 결과가 발생합니까?

관련 정보