[docker] docker exec로 2 개의 명령을 실행하는 방법

docker exec로 2 개의 명령을 실행해야합니다. 도커 컨테이너에서 파일을 복사하고 있으며 ssh와 같은 것을 사용하기 위해 자격 증명을 처리 할 필요가 없습니다. 이 명령은 파일을 복사합니다.

sudo docker exec boring_hawking tar -cv /var/log/file.log | tar -x

하지만 하위 디렉토리 var / log를 생성하므로이를 피하고 싶으므로 도커 컨테이너에서 이러한 작업을 수행 할 수 있다면 좋을 것입니다.

cd /var/log ; tar -cv ./file.log

docker exec가 2 명령을 실행하도록하려면 어떻게해야합니까?



답변

이로 인해 대답이 나왔습니다. Docker 명령 줄의 이스케이프 문자는
결국 이렇게했습니다.

sudo docker exec boring_hawking bash -c 'cd /var/log ; tar -cv ./file.log' | tar -x

그래서 그것은 내가 실행하려는 2 개의 명령 인 매개 변수와 함께 하나의 bash 명령을 실행함으로써 작동합니다.


답변

OP의 질문에서와 같이 작업 디렉토리를 변경하는 데 여러 명령이 필요한 경우가 많습니다.

이를 위해 docker에는 이제 -w작업 디렉토리를 지정 하는 옵션이 있습니다. 예 : 현재의 경우

docker exec -w /var/log boring_hawking tar -cv ./file.log


답변

이것을 우연히 발견하고 더 복잡한 스크립트를 실행하기 위해 여러 명령을 지정하는 다른 방법을 원하는 다른 사람을 위해 :

cat <<EOF | docker exec --interactive boring_hawking sh
cd /var/log
tar -cv ./file.log
EOF


답변

다른 사람이 멋진 대답을 위해 여기에 왔지만 도커 컨테이너에서 파일을 복사하기 위해 OP의 원래 문제 (OP의 OP ..?)를 해결하는 더 나은 방법을 원하면 다음과 같은 docker cp명령이 있습니다. https : //docs.docker.com/engine/reference/commandline/cp/


답변