【问题标题】:Dockerized Rails 7+Puma SSL fails with 'PR_END_OF_FILE_ERROR'Dockerized Rails 7+Puma SSL 因 \'PR_END_OF_FILE_ERROR\' 而失败
【发布时间】:2022-11-08 22:23:00
【问题描述】:

我正在尝试使用默认的puma 服务器dockerize rails 7 应用程序,并使用自签名证书启用ssl。本地启动应用程序按预期工作。

作为容器运行时,我在 Firefox 中收到“PR_END_OF_FILE_ERROR”错误。使用其他浏览器进行测试会导致“可以访问此站点”。 localhost 意外关闭了连接。

docker run 命令:docker run --rm -it -p 3000:3000 my-app-image

Dockerfile CMD: CMD [ "rails", "s" ]

故障排除步骤:

  1. 机器重启

  2. 更新 Docker

  3. 将主机端口 443 映射到容器端口 3000

  4. $RAILS_ENV 开发和生产

  5. docker 文件中 rails 命令的变体:

    1. CMD [ "bundle", "exec", "rails", "s", "-b", "0.0.0.0" ]
    2. CMD [ "rails", "s", "-b", "127.0.0.1" ]
    3. CMD [ "rails", "s", "-u", "puma", "-b", "'ssl://127.0.0.1/?key=server.key&cert=server.crt&verify_mode=none'" ]

      配置/应用程序.rb

      ...
      # Enable SSL
      config.force_ssl = true
      ...
      

      配置/puma.rb

      ...
      environment ENV.fetch("RAILS_ENV") { "development" }
      
      # SSL Configuration
      localhost_key = 'server.key'
      localhost_crt = 'server.crt'
      
      ssl_bind 'localhost', 3000, {
        key: localhost_key,
        cert: localhost_crt,
        verify_mode: 'none'
      }
      ...
      

      由于它在本机运行时有效,我认为问题在于dockerpuma,但我不确定它可能是什么或如何进一步排除故障。

【问题讨论】:

    标签: ruby-on-rails ruby docker ssl


    【解决方案1】:

    问题是将puma.rb 配置文件中的 ssl 端口绑定到 localhost,这在运行的容器之外不可用。

    改变:

    ssl_bind 'localhost', 3000, {

    至:

    ssl_bind '0.0.0.0', 3000, {

    解决了这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-12
      • 2014-02-18
      • 2019-07-26
      • 1970-01-01
      • 2019-05-06
      • 1970-01-01
      • 2014-10-24
      相关资源
      最近更新 更多