2017-10-29 7 views
2

abcde를 사용하여 CD 리핑을위한 Docker 이미지를 만들려고합니다. 요청에 의해 (메일 연결의 유형을 구성 할 것을 구성하는Docker 명령에 키보드 상호 작용이 필요합니다.

FROM ubuntu:17.10 
MAINTAINER Graham Nicholls <[email protected]> 
RUN apt update && apt -y install eject vim ruby abcde 
... 

불행하게도, "ABCDE"패키지가 메일 클라이언트에서 가져옵니다 (확실하지 않음) 및 APT 시도 : 여기하여 Dockerfile의 관련 부분입니다 스마트 호스트/릴레이 등).

도커가 실행되면 stdin에서 읽을 수 없으므로 고정 프로세스로 리디렉션 할 수 없습니다.

나는 apt와 함께 --nodeps을 사용해 보았고 (그리고 apt를 apt-get로 대체); 불행하게도 --nodeps는 것으로 더 - 이상 보인다 지원 옵션 및 반환 :

E : 줄 옵션 --nodeps 명령

누군가가 응답 기대 사용 제안했다 다른 옵션과 함께 이해되지 비슷한 질문을하고 싶습니다. 이것은 "어려운 구글"문제 인 것 같습니다 - 나는 아무것도 찾을 수 없습니다.

그런데 apt의 설정에 대한 대답을 전달하거나 메일 클라이언트를 사용하지 못하도록하는 방법이 있습니까? cddb에 업데이트를 보낼 계획이 아닙니다. 은 "비대화"값으로 실행

RUN apt-get update \ 
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ 
    eject \ 
    vim \ 
    ruby \ 
    abcde \ 
&& apt-get clean \ 
&& rm -rf /var/lib/apt/lists/* 

어떤 메시지를 제거합니다 같은

+2

보통 docker 빌드,'apt' 설치는 비대화 형입니다 (tty가 없으므로). 패키지를 설치하기 전에 Dockerfile의'ENV' 문을 통해)'DEBIAN_FRONTEND = noninteractive'를 설정하면 패키지가 메시지를 표시하지 않게됩니까? – larsks

+0

@ larsks- 감사 합니다만, 슬프게도 차이는 없습니다.오, 잠시만 기다려주십시오. - 당신의 코멘트를 올바르게 읽으십시오. Dockerfile에 넣어 보도록하겠습니다 ... 어떤 작품 이니, 고마워요! 하지만 대답은 일반적으로 apt 명령에 매우 유용하지만 일반적으로 파일에서 응답을 리디렉션해야하는 경우는 어떨까요? –

+0

@Dan Lowe : 편집 해 주셔서 감사합니다.하지만 누구와도 논쟁하지 않습니다. 다른 리퍼가 일반적인 질문을 다루지 않는다는 답변은 내가 작성한 요지입니다. –

답변

3

고정 표시기 컨테이너에 적절한 패키지를 설치하는 일반적인 템플릿 보인다. ENV으로 설정할 필요가 없으므로 컨테이너 내부에서 실행하는 대화식 명령에도 영향을 미칩니다.

완료되면 패키지 데이터베이스를 정리하여 나중에 레이어 크기를 줄이고 나중에 캐시 된 패키지 데이터베이스를 다시 사용하지 않는 것이 좋습니다.

no-install-recommends 옵션은 추가 권장 패키지가 아닌 필수 종속성 만 설치함으로써 설치된 패키지 수를 줄입니다. 이렇게하면 루트 파일 시스템의 크기가 반으로 줄어 듭니다.


기본값이 아닌 구성을 패키지에 전달해야하는 경우 debconf를 사용하십시오. 먼저 어딘가에 대화 형으로 설치하고 저장하려는 옵션을 입력하십시오. debconf-utils을 설치하십시오. 그런 다음 실행하십시오.

debconf-get-selections | grep "${package_name}" 

해당 패키지에 대해 구성된 모든 옵션을 표시하십시오.

RUN echo "postfix postfix/main_mailer_type  select No configuration" \ 
    | debconf-set-selections \ 
&& apt-get update \ 
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ 
.... 

또는 당신이 복사 할 파일에 선택 사항을 저장 : 그런 다음 파이프 당신을 실행하기 전에 당신의 용기에 debconf-set-selections 이러한 옵션은 예를 들어, 설치할 수의 맥락에서,

COPY debconf-selections/
RUN debconf-set-selections </debconf-selections \ 
&& apt-get update \ 
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ 
.... 
+0

감사합니다 - 제쳐두고 나는 apt가 apt-get을 대체한다고 읽었습니다 (좋은 이유가 있다고 확신합니다). 아마도이 충고는 모두 여전히 적용될 것입니다. 또한 ENV 변수를 설정하면 "DEBIAN_FRONTEND"를 존중하는 명령에만 영향을 미칩니 까? 그러나 여전히, 나는 명령에 대해서만 변수를 설정하는 형식을 선호한다 - 그것은 더 깨끗해 보인다. 추운 겨울에 좋은 추억. –

+0

나의 오래된''apt-get' 습관은 열심히 죽습니다.''apt''가 이것을 변경했는지는 확인하지 못했습니다. 그러나 나는 그것을 의심합니다. 'ENV'는 이미지를 만든 후에 컨테이너 내부에서 실행하는 대화 형 명령을 포함하여 그 변수를 사용하는 모든 명령에 영향을 미칩니다. 빌드 후이 변수를 정의하는 것은 이미지 사용자가 직관적이지 않을 수 있습니다. – BMitch

+0

방금 ​​샤워 중이었고 ENV를 사용하여 바리에이션이 컨테이너에 설정되었다는 것을 알 수있었습니다. 이 말은 예상치 못한 결과를 초래할 것입니다. –