2016-03-10 3 views
1

У меня возникают трудности с пересылкой портов в контейнерах докеров. Сначала я попытался переправить порты для существующего контейнера. Тогда я понимаю, что это невозможно. Поэтому я попытался выполнить команду docker run (создать новый контейнер из образа докера).Docker - Не удается переместить порты для интерактивной оболочки

docker run -p 8080:8080 -td <image_id> 

Я проверил команду docker ps и показал эти порты под заголовком «Порты». Но я использовал -d (Run container in background) здесь. Так что это сработало, я думаю.

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

В основном я пытаюсь запустить приложение Ruby On Rails (необходимо перенаправить порты 3000, 3306 и т. Д.) В этот контейнер, и я установил все программное обеспечение и рельсы gem и т. Д. И запустил сервер в этой интерактивной оболочке. Но я не знаю, как пересылать порты для интерактивной оболочки.

Я попытался следующие:

docker run -p 3000:3000 -p 3001:3001 -p 3306:3306 -p 5432:5432 -t -i <image_id> /bin/bash 

Здесь интерактивные работы оболочки, но порты не пересылается.

EDIT: шагов я следовал:

$ docker run -p 3000:3000 -p 3001:3001 -p 3306:3306 -p 5432:5432 -t -i 5c62899c063f /bin/bash 
    [email protected]:/# ls 
    bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var 
    [email protected]:/# cd home/ 

    [email protected]:/home# cd rails/ 
    [email protected]:/home/rails# ls 
    my_project 
    [email protected]:/home/rails# cd my_project/ 
    [email protected]:/home/rails/my_project# ls 
    Gemfile Gemfile.lock README.rdoc Rakefile app bin config config.ru db lib log public test tmp vendor 

    [email protected]:/home/rails/my_project# rails s -b 0.0.0.0 

    => Booting WEBrick              
    => Rails 4.2.5 application starting in development on http://0.0.0.0:3000 
    => Run `rails server -h` for more startup options       
    => Ctrl-C to shutdown server            
    [2016-03-15 05:57:14] INFO WEBrick 1.3.1         
    [2016-03-15 05:57:14] INFO ruby 2.3.0 (2015-12-25) [x86_64-linux]  
    [2016-03-15 05:57:14] INFO WEBrick::HTTPServer#start: pid=113 port=3000 

Тем не менее, когда я иду на локальный хост: 3000, я не могу получить доступ к применению. Интересно, в чем проблема с переадресацией портов в интерактивном контейнере оболочки docker. Как я уже упоминал выше, «Переадресованные порты ничего не показывают» при перечислении контейнеров. Поэтому я сомневаюсь, что команда перенаправления портов с опцией -p не работает с интерактивной оболочкой.

listing the container

Решение: Что я сделал, чтобы решить эту проблему в соответствии с ответом от VonC

enter image description here

+1

Что ты имеешь в виду 'Но я не знаю, как передать порты для интерактивного shell'? Вторая команда, которую вы пишете, работает не так, как вам нужно? Если да, то почему? – Auzias

+0

@Auzias Я имею в виду -i вариант здесь. -it дает мне терминал для работы с контейнером. Но с этой опцией, как я упоминал выше, порты не пересылаются. Я не знаю почему.Я имею в виду, что после запуска «docker run -p 3000: 3000 -p 3001: 3001 -p 3306: 3306 -p 5432: 5432 -t -i /bin/bash», порты не пересылаются. Переадресованные порты ничего не показывают. – Abhi

ответ

0

пересылаемые портов ничего не показывает

Это может ничего не показывает в контейнере в интерактивной оболочке, но эти порты, безусловно, сопоставляются с хостом Linux.

В другом хост-оболочке Linux выполните docker inspect <yourContainer>: вы увидите все порты, сопоставленные с хостом, что означает, что работает curl http://localhost:3000.

Примечание: на ПК вам необходимо переместить этот порт на уровне VirtualBox.
См «Not able to access tomcat application on Docker VM with host(windows) IP while using docker toolbox»

VBoxManage controlvm "default" natpf1 "tcp-port3000,tcp,,3000,,3000" 
VBoxManage controlvm "default" natpf1 "udp-port3000,udp,,3000,,3000" 
+0

Hi @VonC Я редактировал вопрос со всеми моими шагами, которые привели меня к этой проблеме. Пожалуйста, проверь это. Из-за этой проблемы я не могу использовать докер. Поэтому подумайте, чтобы перейти к другой альтернативе. – Abhi

+0

докер инспектировать , показывает "Порты": нулевая, в разделе "NetworkSettings": {..} – Abhi

+0

, "NetworkMode": "по умолчанию", "PortBindings": { "3000/TCP": [ { "HostIp": "", "HostPort": "3000" } ] } – Abhi

Смежные вопросы