対話型bashを使用して新しいDockerコンテナを起動し、その中にあるいくつかのコマンドを実行するコマンドラインを作成するにはどうすればよいですか?

対話型bashを使用して新しいDockerコンテナを起動し、その中にあるいくつかのコマンドを実行するコマンドラインを作成するにはどうすればよいですか?

たとえば、私が欲しいとしましょう。

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

代わりに、1行のコマンドを使用してください。


私の試みが失敗しました:

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

おすすめ記事