Docker は実行中のコンテナにポート マッピングを追加します

問題の説明

docker でコンテナを実行する場合、-p を実行すると 1 つのポートのみがマッピングされます。後で nginx を拡張するには、他のポートを開く必要があります。もちろん、コンテナーを再起動すると、docker 起動パラメーターに -p ポート マッピングをさらにいくつか設定することで問題を解決できますが、コンテナーを再起動したくない場合は、次の 2 つの方法を試してください。

解決

方法 1:

1.コンテナIPを取得します

docker inspect -f '{
   
   {range .NetworkSettings.Networks}}{
   
   {.IPAddress}}{
   
   {end}}' 容器id

2. iptable forwarding を使用して、コンテナーのポート 80 を Docker ホストのポート 8081 にマッピングします。

iptables -t nat -A  DOCKER -p tcp --dport 8081 -j DNAT --to-destination 172.17.0.3:80

方法 2:

1.Docker ps コマンドはコンテナの ID を検索します。

2.コンテナが自動的に起動するように設定する

docker update 容器id --restart=always

3. コマンドdocker Inspection 6fe599270a48 | grep HostsPath を使用して、nginx コンテナーのポート構成ファイルのアドレスを見つけます。

[root@VM-0-6-centos 123]# docker inspect 6fe599270a48 | grep HostsPath
        "HostsPath": "/var/lib/docker/containers/6fe599270a482e0bf6b3c9a38a8d6212f6f5339e65b7bf32834ab9a5c6e81f9f/hosts",

4. 設定ファイルのパスを入力します

5. Docker コンテナを閉じます

systemctl stop docker

注:「警告: docker.service を停止していますが、docker.socket によってまだアクティブ化できます」の
  ようなエラーが

6. hostconfig.json 構成ファイルを変更します。

vim hostconfig.json

必要なポート マッピングを追加します。

"PortBindings": {
    "80/tcp": [
        {
            "HostIp": "",
            "HostPort": "8081"
        }
    ],
    "8000/tcp": [
        {
            "HostIp": "",
            "HostPort": "8000"
        }
    ],
    "9000/tcp": [
        {
            "HostIp": "",
            "HostPort": "9000"
        }
    ]
}

7. config.v2.json 構成ファイルを変更します。

同じパスにある config.v2.json を開き、次のExposedPorts和内容を変更します。

"ExposedPorts": {
    "80/tcp": {},
    "8000/tcp": {},
    "9000/tcp": {}
}
"Ports": {
		"80/tcp": [{
			"HostIp": "0.0.0.0",
			"HostPort": "80"
		}],
		"8000/tcp": [{
			"HostIp": "0.0.0.0",
			"HostPort": "8000"
		}],
		"9000/tcp": [{
			"HostIp": "0.0.0.0",
			"HostPort": "9000"
		}]
}

8. Dockerコンテナを再起動します。

systemctl start docker

おすすめ

転載: blog.csdn.net/qq_42014561/article/details/128593933