Подтвердить что ты не робот

Переадресация портов в докер-машине?

Так как boot2docker устарел, я переключился на docker-machine, но я не знаю, как открыть порт из docker-machine. В boot2docker я мог бы сделать так:

boot2docker ssh -L 27017:localhost:27017

Это перенаправляет порт 27017 из VirtualBox на localhost 27017, пока соединение SSH открыто. Обратите внимание, что я не ищу способ постоянно открывать порт в VirtualBox. Как я могу достичь этого с помощью docker-machine?

4b9b3361

Ответ 1

Вы все равно можете получить доступ к команде VBoxmanage.exe из VirtualBox, используемой докерной машиной:

VBoxManage controlvm "boot2docker-vm" natpf1 "tcp-port27017,tcp,,27017,,27017";
  • Используйте docker-machine info, чтобы получить имя вашего vm.
  • используйте modifyvm, если vm еще не запущен.

См. практический пример в этом ответе.


Это текущее обходное решение, ожидающее возможности передать аргумент docker-machine ssh: см. issue 691.

Другим обходным решением является не переадресация порта и использование непосредственно IP-адреса виртуальной машины:

 $(docker-machine ip default)

Как прокомментировал sdc:

Вы можете подтвердить правильность настройки переадресации портов с помощью

 VBoxManage showvminfo boot2docker-vm | grep "NIC.* Rule" 

Ответ 2

В последних версиях машины вы можете просто сделать (где по умолчанию указано имя машины):

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

Это более временное решение, чем изменение конфигурации виртуальной машины.

Используйте следующий вариант для переадресации портов в фоновом режиме:

docker-machine ssh default -f -N -L 27017:localhost:27017
  • -f Запрашивает ssh для перехода к фону непосредственно перед выполнением команды.
  • -N Разрешить пустую команду (полезно здесь только для переадресации портов)

Ответ 3

Вы можете отправить ssh в машину и передать аргументы перенаправления обычного порта:

ssh [email protected]$(docker-machine ip default) -L 27017:localhost:27017

Пароль пользователя docker - tcuser. (см. https://github.com/boot2docker/boot2docker)

Ответ 4

Поскольку мне трудно запоминать, как это сделать, я создал небольшой bash script, называемый pf (что означает "port forward" ), который позволяет:

$ pf 8080

Это приведет к переходу порта 8080 докера на хост порт 8080 в фоновом режиме (добавьте -f, чтобы он запускался на переднем плане). Использовать другой хост-порт:

$ pf 8090:8080

который отображает хост-порт 8090 на 8080.

Чтобы остановить переадресацию порта, добавьте -s:

$ pf 8090:8080 -s

(фактически достаточно хост-порт: pf 8090 -s). Существуют и другие доступные варианты, поэтому посмотрите github.

Ответ 5

Если вы не хотите использовать пароли, я бы добавил, что вы должны просто указать на закрытый ключ.

ssh -L 8080:localhost:8080 -i ~/.docker/machine/machines/default/id_rsa [email protected]$(docker-machine ip default)

Ответ 6

Просто чтобы увеличить в script ответ @VonC - в настоящее время, если вы используете Docker Toolbox на MacOS X, по умолчанию машина VM является "по умолчанию". Таким образом, script для отображения всех экспонатов из контейнера должен выглядеть так:

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}"

В script предполагается, что вы уже переносите порты из контейнера в виртуальную машину.

docker port cassandra

дает вывод, например:

7000/tcp -> 0.0.0.0:7000