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


84

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 명령을 실행하도록하려면 어떻게해야합니까?

답변:


136

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

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

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


정말 감사합니다, 이것은 나에게 많은 도움이
말하지

명령 안에 큰 따옴표가있는 -c "cd /var/log; tar -cv \"$1\""경우 파일이 매개 변수 1에 있으면 그렇게 할 수 있습니다 .
zed

27

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

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

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

정말 유용합니다. 이것이 갈 길입니다.
TortelliEngineer

이것이 바로 제가 찾던 것입니다!
Clay Mitchell

11

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

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

이것은 더 복잡한 스크립트를 실행하고 싶을 때 매우 읽기 쉬운 솔루션입니다. 그것은 더 많은 투표를받을 가치가 있습니다;)
Slava Fomin II

the input device is not a TTY이 방법 으로 오류가 발생합니다
Roy Shilkrot

에서 처리 --interactive해야합니다. 그렇지 않은 경우이 방법을 사용하는 방법에 대한 광범위한 컨텍스트 없이는 무슨 일이 벌어지고 있는지 잘 모르겠습니다.
zbrunson

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.