Dockerは起動されていないコンテナの設定情報を変更します

Dockerは起動されていないコンテナの設定情報を変更します

私が初めてdockerを使用したときは、dockerfileやdocker-composeを使用してサービスをオーケストレーションしませんでした。直接docker runを使用してコンテナを起動しました。その結果、構成ファイルが間違っていたり、誤って停止したりすると、サービスが起動できなくなりました。この時点では心配しないでください。次の方法を使用して、構成ファイルだけでなく、起動コンテナのポート情報やその他の構成情報も変更して、コンテナ内のファイルとデータが引き続き存在するようにすることができます。

1. コンテナ内の構成情報を変更する

ここでは、nginx の起動を例に挙げます。たとえば、docker run を使用して nginx コンテナを作成します。その結果、docker exec ** bash を使用して内部の nginx 構成ファイルが変更され、nginx コンテナが起動しなくなります。この場合、どうすればよいでしょうか。

#まず次のディレクトリに入ります cd /var/lib/docker/overlay2
#設定ファイルを見つける find ./ -name nginx.conf
./a45cd97113877fb480f66e0d982a594c7b18f2035c16e1f7eb687eef15552272/diff/etc/nginx/nginx.conf
./feff64c1f27a695e531c4654afa3b06e1ca84cc38d81cec76dc5ef52f6821c44/diff/etc/nginx/nginx.conf
./feff64c1f27a695e531c4654afa3b06e1ca84cc38d81cec76dc5ef52f6821c44/マージ済み/etc/nginx/nginx.conf
#次に、nginx.conf があるディレクトリに移動します cd ./feff64c1f27a695e531c4654afa3b06e1ca84cc38d81cec76dc5ef52f6821c44/diff/etc/nginx
#たとえば、私のnginx設定ファイルはconf.dフォルダにあります cd conf.d
デフォルト.conf
#そこにある設定情報が自分の nginx 設定情報であるかどうかを確認します。そうであれば、変更します。そうでない場合は、同じように find で見つかった他のディレクトリで探します。vim *.conf
#設定ファイルを変更したら、直接起動します。たとえば、私のnginxコンテナ名はapg_nginxです
docker で apg_nginx を起動します

2. docker実行時に設定情報を変更する

この場合、たとえば、自分のコンテナが停止していて、他のサービスが自分のコンテナによってマップされたポート番号を使用したい場合、または自分のコンテナがその時点で実行構成情報を変更したい場合、どうすればよいでしょうか。

#次のディレクトリに入ります cd /var/lib/docker/containers
096ed809576e948ada99be65faa181b7f926dd0e655c4c373169305a1954c115 d570bc34c3bb5955ec4c336ad3eeb6105ed49e33e87b8dfd35da3c907d074fdc
662d928aada58645e84fba34f1a1c54696061b767e3e262ccf6562db0498e733 e7237690488f15e40a6462df9cdcfeda83a6f7a74517662935c0a149dd36e057
92bb44f63186c3d80ab8557f84cb1ce907aedab714bb0109827dbfed5641daa8 f2849f199fd78b1636aaedf0bd890c12e7c6d8c6ad5849fff2670920e5e37c7d
d27bdc6286dd3314a1116115cab3a33233b9f4fba45ae4c88a6756d5c04a9aa9
#コンテナのハッシュ値を確認します。ハッシュ値で始まるフォルダがコンテナの設定ディレクトリです。docker ps -a
コンテナID イメージ コマンド 作成ステータス ポート名
096ed809576e nginx "nginx -g 'daemon of..." 3 か月前 33 分前 0.0.0.0:8081->80/tcp apg_nginx
#096 cd 096ed809576e* で始まるディレクトリを入力します
drwx------ 4 ルート ルート 4096 6月 22 21:41 ./
drwx------ 9 root root 4096 3月8日 18:07 ../
-rw-r----- 1 ルート ルート 2559664 6月22日 21:47 096ed809576e948ada99be65faa181b7f926dd0e655c4c373169305a1954c115-json.log
drwx------ 2 ルート ルート 4096 3月8日 18:07 チェックポイント/
-rw------ 1 ルート ルート 3408 6月 22 21:41 config.v2.json
-rw-r--r-- 1 ルート ルート 1519 6月 22 21:41 hostconfig.json
-rw-r--r-- 1 root root 13 6月22日 21:41 ホスト名
-rw-r--r-- 1 ルート ルート 174 6月 22 21:41 ホスト
drwx------ 3 ルート ルート 4096 3月8日 18:07 マウント/
-rw-r--r-- 1 ルート ルート 259 6月 22 21:41 resolv.conf
-rw-r--r-- 1 ルート ルート 71 6月 22 21:41 resolv.conf.hash
#hostconfig.json は、実行が開始されたときに構成情報を保存するファイルです vim hostconfig.json
#HostPort 値はホストマシンのポート番号にマッピングされます。自分で変更できます。変更が完了したら、Docker サービスを再起動する必要があります。再起動しないと有効になりません。 systemctl docker restart

上記の 2 つの状況で構成を変更することで、docker run によって起動されたコンテナの問題をここで修正し、正常に起動することができます。一般的に、コンテナを起動するには docker-compose を使用するのが最適です。

追加知識: Docker でコンテナの起動ログを表示する方法

sudo docker logs -f -t --tail 行番号 コンテナ名

コマンド形式:

$ docker logs [オプション] コンテナ
オプション:
--details 詳細情報を表示 -f, --follow リアルタイムログを追跡 --since string 特定のタイムスタンプまたは相対時間(40m(つまり40分)など)以降のログを表示します
--tail string ログの末尾から何行表示するかを指定します。デフォルトはすべてです。
-t, --timestamps タイムスタンプを表示する --until string 特定のタイムスタンプ、または 40m (つまり 40 分) などの相対時間より前のログを表示する

過去 30 分間のログを表示します。

$ docker logs --since 30m CONTAINER_ID

一定時間後にログを表示します。

$ docker logs -t --since="2019-08-02T13:23:37" コンテナID

一定期間のログを表示します。

$ docker logs -t --since="2019-08-02T13:23:37" --until "2019-08-03T12:23:37" コンテナID

起動していないコンテナの設定情報のDocker修正は、エディターが皆さんと共有する内容のすべてです。参考になれば幸いです。また、123WORDPRESS.COMを応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Dockerがコンテナを起動するたびに、IPとホストが指定した操作が実行されます。
  • シェルスクリプトによるDockerコンテナの起動順序の制御の詳細な説明
  • Dockerコンテナ内で2つのプロセスを開始するときのDockerfile実装コード
  • Docker ファイルの保存パス、コンテナの起動コマンド操作の取得
  • Dockerコンテナが起動直後に終了する問題を解決する
  • Docker はすべてのコンテナをバッチ起動して閉じます

<<:  HTML テーブルタグチュートリアル (35): 列間属性 COLSPAN

>>:  MySQL のインデックスと制約の例文

推薦する

JavaScript のマクロタスクとマイクロタスクの詳細

目次1. マイクロタスクとは何ですか? 2. マクロタスクとは何ですか? 3. 事例3.1 結論4....

Vue3 の動的コンポーネントはどのように機能しますか?

目次1. コンポーネントの登録1.1 グローバル登録1.2 グローバルコンポーネントの登録プロセス1...

CSS のグリッドプロパティの使用に関する詳細な説明

グリッドレイアウト親要素に追加された属性グリッドテンプレートの列/グリッドテンプレートの行要素の行ま...

MySQL のフィールドにデフォルトの時間を追加する方法

日付型の違いと用途MySQL には、日付、時刻、年、日付時刻、タイムスタンプの 5 つの日付タイプが...

Reactイベントスロットリング効果が失敗する理由と解決策

目次ここでの問題は次の通りです:解決策1:解決策2: コンストラクタで初期化を割り当てる採掘場の概要...

MySQLデータベーステーブルの容量を確認する方法の例

この記事では、MySQL のデータベース テーブルの容量を確認するためのコマンド ステートメントを紹...

Linux カーネル デバイス ドライバー キャラクタ デバイス ドライバー ノート

/******************** * キャラクターデバイスドライバー**********...

Vue の双方向イベントバインディング v-model の原理についての簡単な説明

目次説明する:要約する補充するDOM を直接変更して操作する js や jQuery とは異なり、V...

MySQLのSQLモードの特徴のまとめ

序文SQL モードは、MySQL がサポートする SQL 構文と、実行されるデータ検証チェックに影響...

MySQL 5.7.13 のインストールと設定方法のグラフィック チュートリアル (win10 64 ビット)

この記事では、参考までにMySQL 5.7.13 winx64のインストールと設定方法のグラフィック...

Linuxで$を#に変更する方法

このシステムでは、# 記号は root ユーザーを表し、$ 記号は通常のユーザーを表します。では、ど...

CSS3.0 でネオンボタンアニメーション効果を実装するためのサンプルコード

今日は、CSS 3.0 で実装されたネオン ボタン アニメーション効果を紹介します。効果は次のとおり...

MySQLでトリガーを作成する方法

この記事の例では、参考のためにMySQLトリガーを作成するための具体的なコードを共有しています。具体...

base target="" はフレームを開くためのベースリンクのターゲットを指定します

<base target=_blank> は、基本リンクのターゲット フレームを新しいペ...

W3C チュートリアル (13): W3C WSDL アクティビティ

Web サービスは、アプリケーション間の通信に関係します。 WSDL は、XML ベースの Web ...