Duplicity를 사용하여 다른 Docker 볼륨 내의 특정 디렉터리에 Docker 볼륨을 백업해야 합니다. 따라서 백업을 수행하는 컨테이너 내에서 다음과 같은 명령을 실행해야 합니다.
mkdir -p /backup/$backup-label
duplicity /target file:///backup/$backup-label
/target
그래서 백업할 볼륨 과 백업을 저장할 볼륨을 매핑하여 위 명령을 실행할 수 있도록 이중성을 포함하는 도커 이미지를 만들었습니다 /backup
.
그래서 내 질문은 $backup-label을 명령에 전달하는 방법 run
과 위에 표시된 이중성을 실행하기 전에 올바른 디렉터리 구조가 존재하는지 확인하기 위해 진입점을 어떻게 생성합니까?
티아, 올레
추신: 컨테이너를 다음과 같이 실행할 수 있다면:
ole@MKI:~$ docker run --rm -it -v data-volume:/target -v backup-volume/label-for-backup:/backup duplicity-backup-image
그러면 문제가 해결될 것입니다. 그러나 분명히 docker는 볼륨 내의 하위 디렉터리 매핑을 허용하지 않습니다. 시도하면 다음 메시지가 나타납니다.
docker: Error response from daemon: create backup-volume/label-for-backup: "backup-volume/label-for-backup" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed.
답변1
좋은 해결책은 쉘 스크립트를 CMD
또는 로 사용하는 것입니다 ENTRYPOINT
.
변수를 스크립트에 전달하려면 -e를 사용하여 모든 환경 변수를 스크립트에 전달할 수 있습니다 docker run -e backup-label=somelabel
. 이 옵션은 매개변수를 해석하지 않고도 다양한 영역을 구성할 수 있다는 장점이 있습니다. 나는 또한${variable:-}
통사론.
귀하의 경우:docker run --rm -e backup-label=somelabel -it -v data-volume:/target -v backup-volume/label-for-backup:/backup duplicity-backup-image
쉘 스크립트(실행 가능한지 확인):
#!/bin/sh
mkdir -p /backup/$backup-label
duplicity /target file:///backup/$backup-label
(그만큼다른 답변아마도 귀하의 사용 사례에 더 우아한 솔루션이 될 것입니다. 하지만 이 질문은 약간 다르며, 대답도 마찬가지입니다. 참고로. 또한 요구 사항이 더욱 복잡해지는 것처럼...)