実行中のdockerミラーのポートマッピングをどのように変更しますか?

1703 ワード

コンテナをdocker runで作成して実行する場合は、-pでポートマッピングルールを指定できます.しかし、最初は設定を忘れたり、設定を間違えたりして修正する必要がある可能性があります.
docker start実行コンテナには、ポートマッピングルールを指定する-pオプションはありません.一つの解決策は、元の容器を削除し、再構築することです.
無状態のアプリケーションクラスミラーならまだしも、データベースミラーならnightmare:)を再構築しましょう.
以下に、いくつかのソリューションを示します.
方法1:ミラープロファイルを変更しdockerを再起動する
コンテナのプロファイル
/var/lib/docker/containers/[hash_of_the_container]/hostconfig.json

その中のhash_of_the_containerはdockerミラーのhash値であり、docker psまたはdocker inspect container_name表示.
一つはPortBindingsで、例えば上記の例では、5432/tcpはコンテナ内部の5432ポート、HostPortはシンクホストにマッピングされたポートに対応しており、この数字を修正すればよい.次にdockerサービスを再起動します.
systemctl restart docker

最後にstart dockerミラーを作成します.
この方法の利点は,副作用がなく,操作も簡単で,dockerサービス全体を再起動する必要があることであり,同じホスト上で多数のミラーを実行していると,他のコンテナのサービスに影響を及ぼす可能性があることである.
方法2:docker commitを利用する
ステップ1:dockerコンテナを停止する
docker stop container01

ステップ2:dockerコンテナをcommit
docker commit container01 new_image:tag

docker commit:コンテナのファイルを新しいミラーに変更し、構成情報commitします.これはテスト時に役立ち、コンテナのすべてのファイルを変更してコア構成情報を新しいdockersミラーにインポートし、このミラーでコンテナをミラーします.これは前のコンテナに何の影響もありません.次の点に注意してください.
ステップ3:前のステップで新しく生成したミラーでコンテナを再起動
docker run --name container02 -p 80:80 new_image:tag

この方法の利点は,統合ホスト上の他のコンテナに影響を及ぼさないことであり,管理がめちゃくちゃで,第1の方法ほど直感的ではないという欠点がある.
私は一般的に第1の方法が好きですが、統合ホスト上の他のサービスに影響を与えることができない場合は、第2の方法しか取れません.
私の微信の公衆番号に注目してください.