대화형 bash를 사용하여 새 도커 컨테이너를 시작하고 그 안에 있는 일부 명령을 실행하는 명령줄을 작성하는 방법은 무엇입니까?

대화형 bash를 사용하여 새 도커 컨테이너를 시작하고 그 안에 있는 일부 명령을 실행하는 명령줄을 작성하는 방법은 무엇입니까?

예를 들어 내가 원한다고 해보자.

docker run --interactive --tty ubuntu:18.04 bash
apt update; apt install -y git nano wget; mkdir t; cd t

대신 한 줄 명령을 사용하십시오.


내 시도가 실패했습니다:

docker run --interactive --tty ubuntu:18.04 (bash; apt update; apt install -y git nano wget; mkdir t; cd t)

그리고

docker run --interactive --tty ubuntu:18.04 "bash; apt update; apt install -y git nano wget; mkdir t; cd t"

답변1

대화형 서브셸을 얻을 수 있도록 bash최종 호출로 끝나는 명령을 만드세요 .bash

docker run --interactive --tty ubuntu:18.04 bash -c "apt update; apt install -y git nano wget; mkdir t; cd t; exec bash"

execexec는 새 bash를 컨테이너의 기본 프로세스로 만드는 데 필요하며 권장됩니다(컨테이너로 전송된 인터럽트를 수신함).

즉, apt호출을 Dockerfile에 넣고 대화형 bash를 사용하여 직접 시작할 수 있는 파생 이미지를 생성해야 합니다.

FROM ubuntu:18.04
RUN apt update && apt install -y git nano wget
RUN mkdir /somedir
WORKDIR /somedir

한 번만 수행하십시오(또는 최신 버전이 필요할 때까지).

docker build -t testbuild .   # done once for all

그리고

docker run -it testbuild  # bash already in /somedir

관련 정보