의사 TTY를 할당하여 대화식으로 Dockerfile에서 Docker 컨테이너를 빌드 할 수 있습니까?


12

Dockerfile 아래에서 컨테이너를 만듭니다.

FROM ubuntu:14.04
...
RUN apt-get update && apt-get install -y vim
#RUN ssh-keygen -f /root/.ssh/id_rsa -N strongpass123$%^
RUN ssh-keygen -f /root/.ssh/id_rsa
...

나는 거의하지 않지만 사용 전후에 많은 명령이 ssh-keygen있습니다.

스크립트를 통해 docker exec -it thirsty_darwin sh script.sh이미지를 태그 한 다음 이미지에 태그를 지정한 다음 컨테이너 체인 (이미지)을 사용할 수는 있지만 원하는만큼 명확한 해결책은 아닙니다.

최악의 경우조차도 ssh-add ~/.ssh/id_rsa예상 도구를 사용해야 할 때입니다. Expect 도구가 비밀번호를 하드 코딩했습니다. 나는 그것을하고 싶지 않습니다.

답변:


17

일반적으로 Docker 이미지에는 비밀을 포함하지 않아야합니다. 이 주제에 대한 자세한 내용은 이 답변 을 참조하십시오 .

Docker는 이 문제에 설명 된 것처럼 적절한 이유로 대화식 빌드 지원하지 않습니다 .

이 작업을 실제로 수행해야하는 경우 다음 docker commit과 같이 사용할 수 있습니다 .

docker build -t thirsty_darwin_base /path/to/Dockerfile
docker run -it --name=thirsty_darwin_changes thirsty_darwin_base /bin/bash
# do interactive stuff in the shell, then exit
docker commit thirsty_darwin_changes thirsty_darwin

이제 thirsty_darwin대화식으로 변경되었습니다.

업데이트 : Docker는 이 답변이 작성된 이후 보다 포괄적 인 비밀 관리를 발표했습니다 .


내가 언급했듯이 그 해결책을 찾았지만 첫 번째 링크 (이 답변)는 내 문제에 대한 좋은 해결 방법이 있습니다. VOLUME컨테이너를 직접 만드는 대신 호스트에서 키를 마운트합니다 . 감사!
koralgooll

1
나는 docker commit일반적으로 하지 말 것을 촉구합니다 -그것은 당신을 약간의 '골든 이미지'코너에 칠할 수 있습니다.
Sobrique

좋은 지적입니다 @Sobrique. 이것이 Docker가 대화식 또는 비 결정적 빌드를 권장하지 않는 이유 중 하나입니다.
Matt Vollrath

Docker는 단순히 기계 만 만드는 데 사용됩니까? 많은 설치에는 사용자 상호 작용이 필요하기 때문입니다. SAGE를 설치해야하고 사용자에게 몇 가지 질문을하기 때문에 빌드에서 Dockerfile을 사용할 수 없습니다.
Magno C

@MagnoC, Docker로 아무것도 만들 수 없습니다. Dockerfiles의 기본 개념은 실행할 때 항상 동일한 결과를 원한다는 것입니다. 대화식 입력으로 변경 될 수 있습니다. Matt가 말했듯이 변경된 컨테이너를 이미지에 넣을 수 있습니다. 그게 내가 최소한 한 일이야 ..
musicliftsme
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.