ruby-on-rails - Docker 容器未在端口 3000 上公开 Rails 应用程序

标签 ruby-on-rails docker

从 Docker 容器运行 Rails 服务器时,主机无法连接到 http://localhost:3000。

Docker 运行方式:

docker run -p 3000:3000 --namerailsapp -it 59b54d3bdf48

Rails 服务器:

=> Booting Puma
=> Rails 6.0.3.1 application starting in development 
=> Run `rails server --help` for more startup options
Puma starting in single mode...
* Version 4.3.5 (ruby 2.5.1-p57), codename: Mysterious Traveller
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://127.0.0.1:3000
Use Ctrl-C to stop

From the host machine:

$ nmap localhost

Starting Nmap 7.60 ( https://nmap.org ) at 2020-06-20 20:59 CEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00013s latency).
Not shown: 994 closed ports
PORT     STATE SERVICE
80/tcp   open  http
139/tcp  open  netbios-ssn
445/tcp  open  microsoft-ds
631/tcp  open  ipp
3000/tcp open  ppp
3306/tcp open  mysql

Nmap done: 1 IP address (1 host up) scanned in 0.07 seconds
$ curl http://localhost:3000
curl: (56) Recv failure: Connection reset by peer

最佳答案

默认情况下,rails 服务器监听 IP 127.0.0.1,该 IP 在容器外部不可用。

解决方案是强制rails服务器监听端口0.0.0.0:3000:

# rails s -b 0.0.0.0
=> Booting Puma
=> Rails 6.0.3.1 application starting in development 
=> Run `rails server --help` for more startup options
Puma starting in single mode...
* Version 4.3.5 (ruby 2.5.1-p57), codename: Mysterious Traveller
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:3000
Use Ctrl-C to stop

来自主机:

$ curl http://localhost:3000
<!DOCTYPE html>
<html>
<head>
  <title>Ruby on Rails</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <style type="text/css" media="screen" charset="utf-8">
    body {
      font-family: Georgia, sans-serif;
      line-height: 2rem;
      font-size: 1.3rem;
      background-color: white;
      margin: 0;
      padding: 0;
      color: #000;
    }

关于ruby-on-rails - Docker 容器未在端口 3000 上公开 Rails 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62490467/

相关文章:

ruby-on-rails - 我得到 rvm : command not found after installation of rvm

ruby-on-rails - Mongoid 标签 - 从模型中收集独特的数组项

linux - docker 能否解决 C 共享库不匹配的问题?

php - E:无法找到软件包libicu-dev,libicu-dev'返回了非零代码:100

c - 如何设置 Docker 容器以在 Nordic nRF5 SDK 上进行开发?

mysql - update_all 没有更新我的数据库

ruby-on-rails - 两列的 active_admin config.sort

ruby-on-rails - 即使更改了签名的最后一个字符,JWT token 也能解码

mysql - 创建一个简单的dot net core和mysql docker容器组合

shell - "I have no name!"作为用户在使用 Tini 的 docker 容器中登录 Jenkins