도커 - compose, 컨테이너가 시작된 후에 스크립트 실행?
저는 랜처를 통해 도커 컴포지트를 통해 키우고 있는 서비스가 있습니다.컨테이너가 전개된 후 비밀번호를 설정해야 하는 문제가 있습니다.
목장 주인의 비밀이 작동하는 방법은, 제가 비밀을 설정하면 목장 주인이 제 비밀이 담긴 파일을 제 컨테이너에 탑재하는 것입니다.나는 그 비밀을 잡기 위해 스크립트를 실행하고 내 구성 파일에 비밀번호를 설정할 수 있기를 희망했습니다.
저는 그 비밀을 도커 파일을 통해 가져올 방법이 없다고 생각합니다. 왜냐하면 저는 그 비밀이 도커 파일에 포함되는 것을 원하지 않기 때문입니다. 그래서 저는 도커 작곡을 통해 그것을 수행하는 것을 고려하고 있습니다.
이게 가능한지 아는 사람?
진입점을 덮어쓰지 않고 컨테이너를 시작한 후 스크립트를 호출하는 방법입니다.
예를 들어, 로컬 몽고DB의 복제 세트를 초기화하는 데 사용했습니다.
services:
mongo:
image: mongo:4.2.8
hostname: mongo
container_name: mongodb
entrypoint: ["/usr/bin/mongod","--bind_ip_all","--replSet","rs0"]
ports:
- 27017:27017
mongosetup:
image: mongo:4.2.8
depends_on:
- mongo
restart: "no"
entrypoint: [ "bash", "-c", "sleep 10 && mongo --host mongo:27017 --eval 'rs.initiate()'"]
- 1부는 간단하게 서비스를 시작합니다(몽고)
- 두 번째 서비스는 "bash" 진입 지점과
restart: no
<=중요
저도 a를 사용합니다.depends_on
서비스와 셋업 서비스 사이에서 시작 주문을 관리할 수 있습니다.
방법은 원래 명령을 호출하기 전에 필요한 모든 초기화 작업을 수행하기 위해 compose COMMAND를 덮어쓰는 것입니다.
- 설정된 암호, 내부 구성 파일 변경 등 원하는 init 작업을 수행할 스크립트를 이미지에 추가합니다.그럼 이만.
init.sh
. 이미지에 추가합니다.
도커 파일:
FROM: sourceimage:tag
COPY init.sh /usr/local/bin/
ENTRYPOINT []
위의 내용은 ENTERPOINT가 정의된 내용을 재정의합니다.sourceimage
. 그것은 이 예를 더 간단하게 만들기 위한 것입니다.INTERPOINT가 도커 파일에서 수행하는 작업을 이해했는지 확인합니다.sourceimage
전화해 보세요command:
도커- compose.yml 파일의.
도커- compose.yml:
services:
myservice:
image: something:tag
...
command: sh -c "/usr/local/bin/init.sh && exec myexecutable"
사용하는 것이 중요합니다.exec
주 명령을 내리기 전에 말입니다그러면 STOP, KILL(키보드의 Ctrl-C) 또는 HUP와 같은 신호를 수신할 수 있는 첫 번째 프로세스(PID1)로 명령이 설치됩니다.
볼륨을 사용하여 다음 작업을 수행할 수도 있습니다.
services:
example:
image: <whatever>
volume: ./init.sh:/init.sh
entrypoint: sh -c "/init.sh"
이것은 탑재될 것입니다.init.sh
복사하지 않고 컨테이너에 저장합니다(중요한 경우에는 일반적으로 그렇지 않습니다).기본적으로 컨테이너 내의 프로세스를 수정할 수 있습니다.init.sh
실제 컴퓨터에 존재하는 파일을 수정할 수 있습니다.
도커 - compose는 실행 중인 기존 컨테이너를 수정하는 방법이 아니라 컨테이너를 시작하는 방법을 지정합니다.
Rancher 문서는 비밀의 기본적인 사용을 위해, 당신은 비밀 배열의 이름으로 비밀을 참조할 수 있다고 언급합니다.docker-compose.yml
.
대상 파일 이름은 암호 이름과 같습니다.
기본적으로 대상 파일 이름은 사용자 ID 및 그룹 ID 0, 파일 모드 0444로 생성됩니다.
비밀 부분에서 외부를 true로 설정하면 비밀이 이미 생성되었음을 알 수 있습니다.기본의 예시
docker-compose.yml
:
version: '2'
services:
web:
image: sdelements/lets-chat
stdin_open: true
secrets:
- name-of-secret
labels:
io.rancher.container.pull_image: always
secrets:
name-of-secret:
external: true
"How to Update a Single Running Docker-compose Container"에 나와 있듯이, 컨테이너를 업데이트하려면 "build, kill, up" 시퀀스가 필요합니다.
docker-compose up -d --no-deps --build <service_name>
언급URL : https://stackoverflow.com/questions/47615751/docker-compose-run-a-script-after-container-has-started
'programing' 카테고리의 다른 글
함수에 출력이 있는지 확인하는 가장 좋은 방법은? (0) | 2023.10.25 |
---|---|
C를 호출하는 기능은 x86 어셈블리 언어에서 나옵니다. (0) | 2023.10.25 |
문자열에서 파일의 메서드를 동적으로 가져옵니다. (0) | 2023.10.25 |
오라클에서 sql server GO와 동등함 (0) | 2023.10.20 |
jquery는 첫번째 요소를 제외한 모든 요소를 제거합니다. (0) | 2023.10.20 |