我正在尝试使用默认的puma
服务器对rails 7
应用程序进行docker
大小调整,并使用自签名证书启用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" ]
故障排除步骤:
-
机器重新启动
-
更新Docker
-
将主机端口443映射到容器端口3000
-
$RAILS_ENV
既是开发又是生产 -
docker文件中rails命令的变体:
CMD [ "bundle", "exec", "rails", "s", "-b", "0.0.0.0" ]
CMD [ "rails", "s", "-b", "127.0.0.1" ]
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'
}
...
由于它在本机运行时可以工作,我认为问题在于docker
或puma
,但我不确定它可能是什么,也不确定如何进一步进行故障排除。
问题是将puma.rb
配置文件中的ssl端口绑定到localhost,该端口在运行容器之外不可用。
更改:
ssl_bind 'localhost', 3000, {
收件人:
ssl_bind '0.0.0.0', 3000, {
解决了这个问题。