Docker – 不能转发交互式s​​hell的端口

在Docker容器中转发端口遇到了很多困难。 首先,我尝试转发现有容器的端口。 然后我意识到这是不可能的。 所以我尝试使用docker run命令(从docker镜像创build一个新的容器)。

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

我使用docker ps命令进行了检查,并在“Ports”标题下显示了这些端口。 但是我在这里使用了-d(在后台运行容器)选项。 所以我猜想它工作。

但我真的需要一个交互式的shell,在这里我想转发一些端口。

基本上我试图在这个容器中运行一个Ruby On Rails应用程序(需要端口3000,3306等),我安装了所有的软件和rails gem等,并在这个交互式shell中启动服务器。 但我不知道如何转发交互式s​​hell的端口。

我尝试了以下内容:

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

这里交互式shell工作,但端口不被转发。

编辑 :我遵循的步骤:

  $ docker run -p 3000:3000 -p 3001:3001 -p 3306:3306 -p 5432:5432 -t -i 5c62899c063f /bin/bash root@342cf0dfb5a5:/# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var root@342cf0dfb5a5:/# cd home/ root@342cf0dfb5a5:/home# cd rails/ root@342cf0dfb5a5:/home/rails# ls my_project root@342cf0dfb5a5:/home/rails# cd my_project/ root@342cf0dfb5a5:/home/rails/my_project# ls Gemfile Gemfile.lock README.rdoc Rakefile app bin config config.ru db lib log public test tmp vendor root@340cf0dfb5a5:/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 

但是,当我去localhost:3000时,我无法访问我的应用程序。 我不知道docker交互式shell容器中的端口转发问题。 正如我上面提到的那样,列出容器时“转发的端口不显示任何内容”。 所以我怀疑上面的端口转发命令与-p选项不适用于交互式shell。

列出容器

解决scheme :根据VonC的答案,我是如何解决这个问题的

在这里输入图像说明

转发的端口不显示

它可能在交互式shell中的容器中没有显示任何内容,但是这些端口当然映射到Linux 主机端口。

在另一个主机Linux shell中,执行一个docker inspect <yourContainer> :你将看到所有的端口映射到主机,这意味着一个curl http:// localhost:3000可以工作。

注意:在PC上,您需要在VirtualBox级别转发此端口。
请参阅“ 使用docker工具箱时无法使用主机(Windows)IP访问Docker VM上的Tomcat应用程序 ”

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