46

ローカルの別のマシンに自分のマシン docker コンテナーにアクセスするための Docker コンテナーをセットアップしました。

以下のコマンドでコンテナーを作成します。

    docker run -it -d --name containerName -h www.myhost.net -v /var/www/html -p 7000:8000 --net mynetwork --ip 172.11.0.10 --privileged myimagename bash

コンテナの詳細を作成した後:

        CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES

        1e1e5e9b74b4        myimgaename         "bash"              21 minutes ago      Up 6 minutes        0.0.0.0:7000->8000/tcp   containername

ネットワークの詳細:

     "NetworkSettings": {
        "Bridge": "",
        "SandboxID": "fe357c54c816fff0f9d642037dc9a173be7f7e42a80776d006572f6a1395969e",
        "HairpinMode": false,
        "LinkLocalIPv6Address": "",
        "LinkLocalIPv6PrefixLen": 0,
        "Ports": {
            "8000/tcp": [
                {
                    "HostIp": "0.0.0.0",
                    "HostPort": "7000"
                }
            ]
        }

mymachine(hostmachine)でdocker ipaddr(172.11.0.10)またはホスト名(www.myhost.net)にアクセスすると、動作します

しかし、ポートでアクセスすると機能しません: hostmachine ip: 192.168.1.1

  go to the browser  192.168.1.1:7000  hostmachine and locally connected anoter machine also.

しかし、私の7000ポートはホストマシンでリッスンしています:

        # ps aux | grep 7000
        root     10437  0.0  0.2 194792 24572 pts/0    Sl+  12:33   0:00 docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 7000 -container-ip 172.11.0.10 -container-port 8000
        root     10941  0.0  0.0 118492  2324 pts/3    R+   12:44   0:00 grep --color=auto 7000

更新 1:

      $ docker version
        Client:
         Version:      1.11.2
         API version:  1.23
         Go version:   go1.5.4
         Git commit:   b9f10c9
         Built:        Wed Jun  1 21:39:21 2016
         OS/Arch:      linux/amd64

        Server:
         Version:      1.11.2
         API version:  1.23
         Go version:   go1.5.4
         Git commit:   b9f10c9
         Built:        Wed Jun  1 21:39:21 2016
         OS/Arch:      linux/amd64

コンテナに別のマシンにアクセスできない理由を教えてください。この問題の解決方法

4

10 に答える 10

0

Docker Wordpress コンテナーでこの問題に遭遇しました。

トラブルシューティング:

curl -Is http://192.168.X.XDocker ホスト自体で実行すると、期待どおりの結果が返されますが、別のサブネット上のラップトップで同じコマンドを実行すると、ハングするだけです。

と同じtelnet 192.168.X.X 80: これは、Docker ホスト自体からポート 80 で期待どおりに接続しますが、Docker ホストの外部では接続しません。それもハングするだけです。

docker logs containerName有用な手がかりを提供しませんでした。

ルーターのファイアウォールでは、Docker ホストとラップトップの間のすべてを許可して、ルーターのファイアウォールがポート 80 での接続を切断していないことを確認しました。

解決:

エラーを解消するのに苦労したdocker runため、複雑さを軽減するためにコマンドからカスタム ネットワークを削除することにしました。

docker runOP と同様に、コマンドで独自のカスタム ネットワークと IP アドレスを指定しました。しかし、コマンドを削除する--netと、デフォルトのブリッジと Docker DHCP が割り当てられたアドレスを使用してコンテナが起動しました。--ipdocker run

テスト ソリューション:

以下を使用して、Wordpress コンテナーの IP を見つけました。

docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' wordpressContainerName

ラップトップのブラウザにWordpressをロードしようとしました。コンテナーは、別のサブネット上の Docker ホストの外部にある転送されたポート 80 で接続できるようになりました。

結論:

コマンドから削除する--netと、私の場合は問題が修正されました。もちろんYMMV。--ipdocker run

于 2021-12-01T11:39:46.397 に答える
-1

部分的な回答:

今、私はこの問題を部分的に解決しました.bashなしでコンテナを作成し、ポートを3000(-p 3000:80)に変更しようとしましたが、うまくいきました。

コマンドの前:

     docker run -it -d --name containerName -h www.myhost.net -v /var/www/html -p 3000:80 --net mynetwork --ip 172.11.0.10 --privileged myimagename  bash

コマンドの後:

    docker run -it -d --name containerName -h www.myhost.net -v /var/www/html -p 3000:80 --net mynetwork --ip 172.11.0.10 --privileged myimagename

それで、

bin/bashでコンテナを実行する

  docker exec -it containerName bin/bash

今、ローカルで動作します 接続された別のマシン。

 hostmachineip:3000 


I don't know docker have any port restrictions.But This solution works for me.
于 2016-09-17T05:17:46.997 に答える