Dockerized Rails 7+Puma SSL 失败,'PR_END_OF_FILE_ERROR'



我正在尝试使用默认的puma服务器对rails 7应用程序进行docker大小调整,并使用自签名证书启用ssl。以本机方式启动该应用程序可以正常工作。

当作为容器运行时,我在Firefox中收到一个"PR_END_OF_FILE_ERROR"错误。使用其他浏览器进行测试会导致"无法访问此网站"。localhost意外关闭了连接"。

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

DockerfileCMD: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'" ]

config/application.rb

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

config/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,但我不确定它可能是什么,也不确定如何进一步进行故障排除。

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

更改:

ssl_bind 'localhost', 3000, {

收件人:

ssl_bind '0.0.0.0', 3000, {

解决了这个问题。

相关内容

最新更新