51

は推奨されていないため、 にboot2docker切り替えましたdocker-machineが、 からポートを開く方法がわかりませんdocker-machineboot2docker私はこのようにすることができます:

boot2docker ssh -L 27017:localhost:27017

これにより、SSH 接続が開いている限り、ポート 27017 が VirtualBox から localhost 27017 に転送されます。VirtualBox でポートを永続的に開く方法を探しているわけではないことに注意してください。どうすればこれを達成できdocker-machineますか?

4

6 に答える 6

49

Docker マシンが使用する VirtualBox から VBoxmanage.exe コマンドに引き続きアクセスできます。

VBoxManage controlvm "boot2docker-vm" natpf1 "tcp-port27017,tcp,,27017,,27017";
  • docker-machine infovm の名前を取得するために使用します。
  • modifyvmvm がまだ開始されていない場合に使用します。

この回答で実際の例を参照してください。


これが現在の回避策であり、 に引数を渡す可能性が保留されています: issue 691docker-machine sshを参照してください。

もう 1 つの回避策は、ポートを転送せ、VM の IP を直接使用することです。

 $(docker-machine ip default)

sdcのコメントによると:

ポートフォワーディングが正しく設定されていることを確認するには、

 VBoxManage showvminfo boot2docker-vm | grep "NIC.* Rule" 
于 2015-08-24T05:46:30.730 に答える
28

マシンの最近のバージョンでは、簡単に実行できます (デフォルトはマシンの名前です)。

docker-machine ssh default -L 27017:localhost:27017

これは、VM 構成の変更よりも一時的な解決策です。

次のバリエーションを使用して、バックグラウンド プロセスでポートのみを転送します。

docker-machine ssh default -f -N -L 27017:localhost:27017
  • -fコマンド実行の直前に ssh にバックグラウンドへの移行を要求します。
  • -N空のコマンドを許可します (ここではポートのみを転送するのに役立ちます)
于 2016-01-02T21:43:09.783 に答える
18

マシンに ssh して、通常のポート転送引数を渡すことができます。

ssh docker@$(docker-machine ip default) -L 27017:localhost:27017

dockerユーザーのパスワードはtcuserです。( https://github.com/boot2docker/boot2dockerを参照)

于 2015-10-03T19:29:44.237 に答える
10

これを行う方法を思い出すのに苦労しているため、pf (「ポート転送」の略) という小さな bash スクリプトを作成しました。これにより、次のことが可能になります。

$ pf 8080

これにより、docker ポート 8080 がバックグラウンドでホスト ポート 8080 に転送されます (追加-fしてフォアグラウンドで実行します)。別のホスト ポートを使用するには、次のようにします。

$ pf 8090:8080

これは、ホスト ポート 8090 を 8080 にマップします。

ポート フォワーディングを停止するには、次のように追加し-sます。

$ pf 8090:8080 -s

(実際には、ホスト ポートでも十分です: pf 8090 -s)。他にも利用可能なオプションがあるので、githubページをチェックしてください。

于 2016-04-08T08:20:34.487 に答える
4

パスワードを使用する必要がない場合は、秘密鍵を指定するだけでよいことを付け加えておきます。

ssh -L 8080:localhost:8080 -i ~/.docker/machine/machines/default/id_rsa docker@$(docker-machine ip default)
于 2015-10-27T17:00:28.373 に答える
1

スクリプトで@VonCの答えを強化するだけです-現在、MacOS XでDocker Toolboxを使用している場合、デフォルトのVMマシンは「デフォルト」です。したがって、コンテナから公開されたすべてをマップするスクリプトは次のようになります。

for port in `docker port cassandra | cut -d'-' -f1`; 
do 
    port_num=`echo ${port} | cut -d'/' -f1`
    port_type=`echo ${port} | cut -d'/' -f2`
    echo "Create rule natpf1 for ${port_type} port ${port_num}"
    VBoxManage controlvm "default" natpf1 "${port_type}-port${port_num},${port_type},,${port_num},,${port_num}"
done

何度か実行しようとする場合は、既存のルールを削除するために、作成前にステートメントを追加する必要があります。

VBoxManage controlvm "default" natpf1 delete "${port_type}-port${port_num}"

スクリプトでは、コンテナーから VM へのポート転送が既に行われていることを前提としています。

docker port cassandra

次のような出力が得られます。

7000/tcp -> 0.0.0.0:7000
于 2016-01-12T19:50:03.290 に答える