2014-06-20 3 views
13

Dockerfile을 사용하여 이미지를 만들고 싶습니다. 그러나 명령은 실행할 때 사용자 입력이 필요합니다. 현재 도커가 사용자 입력을 종료하기 때문에 빌드가 성공적이지 않습니다. 나는 docker run 명령에 -i -t 옵션을 사용할 수 있지만 Dockerfile에서 실행하려고합니다. 어떻게 가능합니까?dockerfile에서 대화 형 도커를 빌드 하시겠습니까?

+0

예를 들어 apt-get update에 대한 사용자 입력의 경우 사용자 입력에 따라 사용자 입력에 따라 -y를 추가하여 항상 예라고 말할 수 있습니다. 그렇지 않으면, 사용자 입력을 취하여 환경 변수에 저장 한 다음 환경 변수에서 가져옵니다. –

+0

'rvmsudo passenger-install-nginx-module'을 실행하고 있습니다. 귀하의 추천이 여기에 적용되는지 모르겠습니다. – Keeto

+1

그런 경우 이미 설치된 모듈 (수동으로 필요한 데이터 입력)로 기본 이미지를 만든 다음 해당 새 이미지를 사용하여 Dockerfiles를 만듭니다. 실행중인 스크립트가 무인 설치를 지원하지 않는다면 해결할 수있는 일반적인 방법이 있는지 궁금합니다 ... –

답변

6

expect 또는 이와 비슷한 도구를 사용해볼 수 있습니다.

가장 쉬운 방법은 autoexpect 도구를 사용하는 것입니다.이 도구를 사용하면 대화식으로 명령을 실행하고 예상 스크립트를 만들 수 있습니다.

rvmsudo 항목이 작동하지 않아서 (사용하지 않았고 너무 많은 시간을 보내고 싶지 않았기 때문에) 대신 vi을 사용하기로 결정했습니다. 첫 방송 autoexpect

$ autoexpect vi test 

vi를 열리고 만들거나 파일을 편집하고 저장할 수 있습니다. vi을 종료하면 파일 test과 예상 스크립트 script.exp이 표시됩니다.

그런 다음 테스트 파일을 제거하고 script.exp을 실행할 수 있습니다. 동일한 단계를 사용하여 동일한 파일을 다시 만듭니다.

autoexpect 도구는 훌륭하지만 상황에 대해 더 많은 제어가 필요한 경우 처음부터 스크립트를 만들어야 할 수도 있습니다. 예 : 정확한 예상 입력으로 스크립트가 작동하지 않게하려면

+2

downvoters을 좋아해요, 그는 대답에 대해 잘못된 말을하지 않습니다. 건배! – ivant