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 のインデックスと制約の例文

推薦する

Flinkのフォールトトレラントメカニズムに関する簡単な説明:ジョブ実行とデーモン

目次1. ジョブ実行のフォールトトレランス1.1 タスクフェイルオーバー戦略1.2 ジョブ再開戦略2...

CSSオーバーフローメカニズムについての簡単な説明

CSS オーバーフローのメカニズムを詳細に学ぶ必要があるのはなぜですか?実際の開発プロセスでは、コン...

MySQLの外部ネットワークアクセス権を開く方法

以下のように表示されます。主に認証コマンドを実行します: 2つの方法1. 任意のホストがユーザー b...

Vue3とVue2の利点のまとめ

目次1. なぜ vue3 が必要なのでしょうか? 2. vue3の利点3. 応答原則の違い4. ライ...

Webpack パッケージング CSS 背景画像パスの問題に対する完璧なソリューション

vue コンポーネントのスタイル タグ内には、背景画像を使用する次の CSS コードがあります。 背...

Vue で Axios 非同期リクエスト API を使用する方法

目次基本的なHTTPリクエストの設定async/await を使用した Axios Axios によ...

モバイル署名機能を実装するJavaScript

この記事では、モバイル署名機能を実装するためのJavaScriptの具体的なコードを参考までに共有し...

HTMLページ間でパラメータを渡すフロントエンド方式の詳細な説明

プロジェクトでよくある状況として、案件リストなどのリストが存在することがあります。リスト内の項目をク...

CSSフロートの特性についての簡単な説明

この記事では、CSS フロートの特徴を紹介します。皆さんと共有し、自分用のメモとして残したいと思いま...

MySQL 5.7.33 インストール プロセスの詳細な図解

目次インストールパッケージのダウンロードインストール環境変数の設定インストールが成功したか確認する記...

Vue Element フロントエンドアプリケーション開発の動的メニューとルーティングの関連付け処理

目次概要1. メニューとルーティング処理2. メニューとルートリスト3. ログインプロセスの処理概要...

バッチファイルを処理するLinuxの1行コマンドの詳細な説明

序文最良の方法は、あなたが思いつく最も速い方法ではないかもしれません。職場で一時的に使用するスクリプ...

MySql8.0バージョンに接続するMyBatisの設定問題について

mybatis を学習しているときにエラーが発生しました。エラーの内容は次のとおりです。データベース...

MySQL で置換操作を使用したときにデータ損失が発生する問題の解決策

序文同社の開発者は、データの更新時に replace into ステートメントを使用していました。不...

MySQL テーブルと列のコメントの概要

コードと同様に、テーブルや列にコメントを追加して、他のユーザーがその機能を理解できるようにすることが...