2014-12-09 4 views
5

나는 Docker를 사용하여 파일을 즉시 작성하고 실행합니다. 명령은 지금까지와 같이 (처음 아이디어를 테스트하기 위해) 다음과 같이 보입니다.docker에서 더 긴 명령 실행

무엇인가의 이유로 이것이 에코를 울리지 않습니다.

HEREDOC없이이 명령을 실행하면 결과가 출력됩니다. 예를 들면 다음과 같습니다 :

docker run dockerfile/python cat > hi.txt && ls 
hi.txt 

다중 행 실행 명령/HEREDOC의 결과를 어떻게 출력합니까?

답변

3

두 번째 명령이 작동하도록 사용하고있는 쉘이 궁금합니다. bash에서는 호스트에 hi.txt이 생성되고 ls도 생성됩니다.

bash-3.2$ docker run --rm dockerfile/python cat > hi.txt && ls 
Applications Desktop  Documents Downloads Dropbox  Library  Movies  Music  Pictures Public  VirtualBox VMs hi.txt  projects 

그것을 달성하기 위해, 내가 사용해야 할 것 :

IMO
docker run --rm dockerfile/python bash -c 'cat > hi.txt && ls' 

, 물건을 테스트하는 가장 간단한 방법은 그냥 샌드 박스로 컨테이너를 사용 :

docker run -it dockerfile/python bash 

그런 다음 컨테이너의 껍질에 물건을 넣으십시오. 일단 잘 돌아가고 나면 Dockerfile에서 수행 한 작업을 백 포트합니다.

2

나는 crossbuild *으로 장난 꾸러미 였고 여기 문서을 사용하여 Docker 컨테이너로 명령을 파이프하는 방법에 대해 궁금해했습니다. 여기에 해결책이 있습니다.

$ docker run --rm --interactive --volume $(pwd):/workdir --env CROSS_TRIPLE=x86_64-apple-darwin multiarch/crossbuild /bin/bash -s <<EOF 
mkdir build && cd build 
cmake .. 
make 
EOF 

빠른 진행 상황입니다.

  • --rm이 그렇지 않으면
  • --interactive를 (물론 사용이 필수는 아닙니다) 출력 docker ps -a에 표시 것, 그것이 실행이 완료되면 컨테이너를 제거 도커를 알려줍니다 -i은, 그렇지 않으면 /bin/bash가 실행되지 것입니다 필요 대화 형 환경 및 입력으로 표준 입력에서 여기 서류를 수리하지 않을 일 경우 /bin/bash

    에 전달 된 -s 플래그에 대한

  • e -s 옵션이 있거나 옵션 처리 후 인수가 없으면 표준 입력에서 명령을 읽습니다.,

  • --volume $(pwd):/workdir, 그냥 -v 컨테이너
  • --env CROSS_TRIPLE=x86_64-apple-darwin/workdir에 호스트의 현재 작업 디렉토리를 마운트합니다, 또는 간단한 -e는 컨테이너의 진입 점 /usr/bin/crossbuild입니다 (대상 플랫폼 및 아키텍처에 대해 crossbuild 컨테이너를 알려줍니다 쉘 스크립트이며 환경 변수를 기반으로 심볼릭 링크를 통해 올바른 툴체인 구성 요소를 크로스 컴파일 작업에 적합한 위치에 적용)
  • multiarch/crossbuild 실행할 Docker 컨테이너의 이름 (Docker 허브에서 사용 가능)

이렇게 명령을 Docker에 공급할 수 있습니다.

$ cat a.sh 
mkdir build && cd build 
cmake .. 
make 
$ docker run --rm -i -v $(pwd):/workdir -e CROSS_TRIPLE=x86_64-apple-darwin multiarch/crossbuild /bin/bash -s < a.sh 

호핑이 도움이됩니다.

업데이트는 사실은 당신도, 그것은 적어도 crossbuild 용기, YMMV를 들어, ommited 할 수 /bin/bash -s를 사용할 필요가 없습니다 것 같다.

* Linux 기반 컨테이너는 멀티 아치 바이너리를 생성하는 데 사용됩니다. Linux, Windows 및 OS X, 매우 멋지다.