【发布时间】:2016-03-10 10:26:27
【问题描述】:
在 docker 容器中转发端口时遇到了很多困难。首先,我尝试为现有容器转发端口。然后我意识到这是不可能的。所以我尝试使用 docker run 命令(从 docker 映像创建一个新容器)。
docker run -p 8080:8080 -td <image_id>
我检查了 docker ps 命令,它在“端口”标题下显示了这些端口。但我在这里使用了 -d(在后台运行容器)选项。所以我猜它起作用了。
但我真的需要一个交互式外壳,在这里我想转发一些端口。
基本上,我试图在这个容器中运行一个 Ruby On Rails 应用程序(需要转发端口 3000、3306 等),我安装了所有软件和 rails gem 等,并在这个交互式 shell 中启动了服务器。但我不知道如何转发交互式 shell 的端口。
我尝试了以下方法:
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。
解决方案: 根据 VonC 的回答,我为解决此问题所做的工作
【问题讨论】:
-
But I don't know how to forward the ports for an interactive shell是什么意思?您编写的第二个命令是否无法按您的需要工作?如果有,为什么? -
@Auzias 我的意思是 -i 选项。 -it 选项为我提供了一个使用容器的终端。但是,正如我上面提到的,使用此选项,端口不会转发。我不知道为什么。我的意思是在我运行 'docker run -p 3000:3000 -p 3001:3001 -p 3306:3306 -p 5432:5432 -t -i
/bin/bash' 之后,端口不转发。转发的端口不显示任何内容。
标签: ruby-on-rails linux shell docker ubuntu-14.04