Docker & Containers

docker runコマンド起動前に引数を確認

イメージと必要な割り当てを指定し、POSIXシェル向けのコマンドを確認します。

docker runコマンド

操作の引数

ポート

マウント

環境変数

コマンドのプレビュー

docker run \
  --detach \
  'nginx:alpine'

macOS、Linux、WSLのPOSIX sh向けです。パスは文字どおりに扱い、変数や~を展開しません。

設定はこのブラウザー内で処理します。Docker接続、レジストリ照会、コマンド実行は行いません。

オプション

各グループ20行まで。CPUは0.001–1024、メモリは整数b/k/m/gで最小6MiB。空欄は未指定です。

プレビューは最新です。

ホストのポートとコンテナのポートを逆に書いたり、以前の起動例から不要なボリュームを残したりしていませんか。docker runコマンドを組み立てるフォームで、どちら側の設定かを一つずつ確認できます。

最初のイメージはnginx:alpineです。バックグラウンドで起動する設定ですが、ポートはまだ公開しません。空欄のオプションは省略し、イメージ本来の起動処理を使います。アプリの必要なパスや変数を推測して追加することはありません。

docker runコマンドをフォームで組み立てる理由

コロンや引用符の前に設定を整理

docker runコマンドの各引数を、ホストとコンテナのポート、マウント元と先、変数名と値に分けて入力します。空白や単一引用符を含むパスも一つの引数として出力します。変更直後から古い結果のコピーを無効にするため、修正前の設定を持ち出すミスを防げます。

イメージ、ポート、マウントの入力行から一つのターミナルコマンドを組み立てる図。

公開範囲と機密値を先に点検

特権モード、機密ディレクトリのバインド、ループバック以外へのポート公開を別々に警告します。環境変数の値は入力欄と結果の両方でマスクされ、表示を選ぶまでエクスポートできません。マスクは画面表示上の処理であり、暗号化ではありません。

マスクされた環境変数と無効なエクスポートの横に、特権とホストマウントの警告を示す図。

実行前に決めておく三つのこと

01

ホスト側のアドレスを選ぶ

追加するポート行は127.0.0.1とTCPから始まります。アドレスを消すと全インターフェースへの公開を指定するので、空欄を自動的な非公開設定と考えないでください。コンテナ側はアプリが実際に待ち受けるポートを指定します。

02

名前付きボリュームかパスかを区別

Dockerが管理する領域はvolume、ホスト上の既存パスはbindです。新しいマウントは読み取り専用です。データベースなど書き込みが必要な用途では明示的に解除し、Dockerホスト上のパスを確認してください。

03

複数箇所の変更は手動モードでも

自動生成は入力停止から350ms後に行います。オフにすると生成ボタンが現れ、Ctrl/Cmd+Enterでも更新できます。サンプル、クリア、行削除は変更内容をプレビューしてから適用し、一度だけ入力と結果を元に戻せます。

生成する引数の意味

方向が分かるポート割り当て

各行はIPv4、ホストポート、コンテナポート、TCPまたはUDPから一つの--publish引数になります。同じプロトコルとホストポートでアドレス範囲が重複する行は拒否します。別プロトコルで同じ番号は使用できますが、ホストの実際の使用状況は調べません。

種類を明示した永続ストレージ

バインドマウントと名前付きボリュームは--mountのtypeで区別します。readonlyの有無も結果で確認できます。同じコンテナパスを複数行で指定するとエラーになり、後の行が先の設定を覆い隠す形の出力は作りません。

環境変数を文字どおり渡す

値に含まれる空白、等号、単一引用符、ドル記号を保持します。空値はKEY=と明示し、同名変数は拒否します。ホスト環境を参照したり、$HOMEを展開したりしません。入力したシェル構文は実行せず、そのままの文字列として引用します。

再起動ポリシーと使用量の上限

バックグラウンド、対話端末、名前、終了時削除に加え、CPUとメモリの上限を指定できます。no以外の再起動ポリシーと--rmは同時に選べません。リソース欄を空にした場合は制限用の引数を付けず、指定値が利用可能かもホスト側での確認が必要です。

扱う形式と扱わない設定

POSIXシェルの単一コマンド
Linux、macOS、WSLのPOSIXシェル向けです。PowerShellやCMD、Windowsパス、既存コマンドの読み込み、Compose出力、Dockerfile、任意の追加フラグや起動コマンドの上書きには対応しません。Dockerの実行やレジストリへの照会も行いません。
イメージとポートの範囲
小文字のリポジトリ、任意のDNSまたはIPv4レジストリとポート、タグ、sha256ダイジェストを受け付けます。IPv6レジストリ、裸のイメージID、他のダイジェストは対象外です。ポートは1–65535の単一整数で、範囲、ランダム割り当て、IPv6バインド、SCTPは使えません。
曖昧なマウント指定を拒否
bindの元は絶対パス、先はルート以外の絶対パスにします。カンマ、二重引用符、バックスラッシュ、制御文字、.と..の区間は拒否します。空白と単一引用符は保持します。ボリューム名は英数字で始まる2–255文字で、英数字、点、下線、ハイフンだけを使えます。
入力と数値の上限
各グループは20行まで、単一の文字列は4096 UTF-16単位、全体は65536単位までです。CPUは0.001–1024で小数点以下3桁まで。メモリは整数と任意のb/k/m/gで指定し、最小6MiB、最大は符号付き64ビットのバイト数です。上限を超えた内容を勝手に切り捨てません。
値を表示すると出力にも含まれる
環境変数の値を隠した状態では、その値を含む結果はコピーもダウンロードもできません。表示を許可した後のスクリプトには実値が入り、シェル履歴やコンテナの検査から見える可能性があります。変数名とパスは秘密として自動分類しません。
警告はホストの監査ではない
ルート、システム、ユーザーディレクトリへのバインドを警告しますが、シンボリックリンクは解決しません。Dockerソケットは読み取り専用でも慎重な確認が必要です。ファイルの存在、権限、イメージの内容、カーネルの制限対応までは保証できません。

docker runコマンドに関する質問

docker runでコンテナの環境変数を参照するには?

このフォームの環境変数欄はコンテナに渡す固定値を指定します。$NAMEを書いてもホスト側やコンテナ側の値には展開しません。コンテナ内で変数を参照する処理はイメージの起動コマンド側で行う必要があり、このツールはそのコマンドを上書きしません。

コンテナ内のMariaDBにホストからアクセスする方法は?

ホストから接続するには、データベースが待ち受けるコンテナポートをホスト側に公開する設定が必要です。たとえば内部の3306を指定し、ホスト側には使用可能な番号を選びます。サーバーの待ち受けアドレス、認証、実際のポート使用状況も別途確認してください。

空白を含む環境変数をDockerに渡すには?

値をそのまま入力してください。前後にシェル用の引用符を付ける必要はありません。KEY=value全体を一つの引数にするため、空白や等号が含まれても分割されません。改行や制御文字はエラーになります。

Dockerfileで--rmと--restartを設定できますか?

どちらもDockerfile命令ではなく、コンテナを作成するときの実行オプションです。再起動を必要とするサービスでは終了時削除をオフにしてください。--rmを使う一時的な処理では再起動ポリシーをnoにします。

名前付きボリュームとバインドマウントの違いは?

名前付きボリュームはDockerが名前で管理するストレージです。バインドマウントはホスト上の特定パスにつながり、許可するとホストのファイルを書き換えられます。--mountでは存在しないバインド元は通常エラーになりますが、このページから存在確認はできません。

プレビューがDockerのドキュメントと異なりますか?

引数を確認してからターミナルへ

docker runコマンドを組み立てたら、警告と設定を読み直し、実際のDockerホストに合っているかを確認してから保存してください。