Dockerがコンテナーのポートマッピングとマウントパスを変更する

オリジナル: Dockerがコンテナーのポートマッピングとマウントパスを変更する

場合によっては、ポートマッピングやマウントパスなどの理由でコンテナーの構成を変更する必要がありますが、コンテナーを削除してから再実行すると、コンテナーで行われた以前の変更が失われます。この記事では2つの方法を提供します。変更を保持しながら、構成パラメーターを変更します。

方法1:コンテナーを画像として保存する

1.コンテナーを停止します

docker stop CONTAINER

2.コンテナを新しいイメージとして保存します

docker commit CONTAINER NEWIMAGE:TAG

3.新しいイメージを開始します。この時点で、パラメーターを再指定できます

docker run --name CONTAINER OPTIONS NEWIMAGE:TAG

方法2は、コンテナー構成ファイルを直接変更します

1.コンテナー構成ファイルのパスを取得してコンテナーを停止します

docker inspect CONTAINER
{
"ResolvConfPath": "/var/lib/docker/containers/96b9323df1569e83c9945a9daab253c7c5e6cab35cd4b5eb19b16913e130cd14/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/96b9323df1569e83c9945a9daab253c7c5e6cab35cd4b5eb19b16913e130cd14/hostname",
"HostsPath": "/var/lib/docker/containers/96b9323df1569e83c9945a9daab253c7c5e6cab35cd4b5eb19b16913e130cd14/hosts",
"LogPath": "/var/lib/docker/containers/96b9323df1569e83c9945a9daab253c7c5e6cab35cd4b5eb19b16913e130cd14/96b9323df1569e83c9945a9daab253c7c5e6cab35cd4b5eb19b16913e130cd14-json.log",
}

上記のように出力の一部をインターセプトします。このうち/ var / lib / docker / containers / 96b9323df1569e83c9945a9daab253c7c5e6cab35cd4b5eb19b16913e130cd14 /は設定フォルダーで、パスを記録したらコンテナーを停止します。

docker stop CONTAINER

2. linuxkitを入力します

(1)ターミナルに入力:
screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty
ヒント:

-ctrl + a + kを押してyを押し、この画面を強制終了することを確認します
-ctrl + a + dを使用してこの画面を一時的に終了します。もう一度入力する必要がある場合は、screen -drを使用する必要があります。画面〜/ライブラリを再度使用することはできません/Containers/com.docker.docker/Data/vms/0/tty、このコマンドは再び画面を作成し、いくつかの不可解な問題を引き起こします

(2)構成フォルダーを入力します。
cd /var/lib/docker/containers/96b9323df1569e83c9945a9daab253c7c5e6cab35cd4b5eb19b16913e130cd14/
(3)設定ファイルを変更する

このディレクトリのhostconfig.jsonファイルとconfig.v2.jsonファイルの両方を変更する必要があります

ポートマッピングの変更

hostconfig.json

{
"PortBindings":{"8080/tcp":[{"HostIp":"0.0.0.0","HostPort":"22"}],
                "9090/tcp":[{"HostIp":"0.0.0.0","HostPort":"9999"}]}
}

config.v2.json

{
"ExposedPorts":{"8080/tcp":{},"9090/tcp":{}}
}
マウントパスを変更する

hostconfig.json

{
"Binds": ["/data:/mnt/data", "/home/logs:/logs"]
}

config.v2.json

{
"MountPoints":{"/mnt/data":{"Source":"/data","Destination":"/mnt/data","RW":true,"Name":"","Driver":"","Type":"bind","Propagation":"rprivate","Spec":{"Type":"bind","Source":"/data","Target":"/mnt/data"},"SkipMountpointCreation":false},
               "/home/logs":{"Source":"/home/logs","Destination":"/logs","RW":true,"Name":"","Driver":"","Type":"bind","Propagation":"rprivate","Spec":{"Type":"bind","Source":"/home/logs","Target":"/logs"},"SkipMountpointCreation":false}}
}
(4)Dockerサービスを再起動します

保存後、画面を終了し、Dockerサービスを再起動します。
設定が有効であり、実行できるかどうかを確認します

docker inspect CONTAINER

2つのキーワード「Mounts」と「Ports」で構成が有効になったかどうかを確認します。

おすすめ

転載: www.cnblogs.com/lonelyxmas/p/12690378.html