如何解决在 docker 容器中使用带有 ssl 的自托管 (Jetty) Metabase 时出错
我正在尝试在启用 ssl 的 docker 容器内设置自托管 (Jetty) 元数据库。
首先我使用 certbot 创建了 fullchain.pem
和 privkey.pem
,然后使用 this gist 转换为 keystore.jks
。
然后创建了一个用于 --env-file
docker 标志的 .env 文件:
MB_DB_FILE=/metabase/metabase.db
MB_JETTY_SSL=true
MB_JETTY_SSL_PORT=443
MB_JETTY_SSL_KEYSTORE=./keystore.jks
MB_JETTY_SSL_KEYSTORE_PASSWORD=my-pass
并试图运行:
docker run -p 80:3000 -v ~/metabase:/metabase --env-file "./prod.env" --name metabase metabase/metabase
但我收到以下错误:
ERROR metabase.core :: Metabase Initialization FAILED
java.net.SocketException: Permission denied
at sun.nio.ch.Net.bind0(Native Method) ~[?:?]
at sun.nio.ch.Net.bind(Unknown Source) ~[?:?]
at sun.nio.ch.Net.bind(Unknown Source) ~[?:?]
at sun.nio.ch.ServerSocketChannelImpl.bind(Unknown Source) ~[?:?]
at sun.nio.ch.ServerSocketAdaptor.bind(Unknown Source) ~[?:?]
at org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:345) ~[metabase.jar:?]
at org.eclipse.jetty.server.ServerConnector.open(ServerConnector.java:310) ~[metabase.jar:?]
at org.eclipse.jetty.server.AbstractNetworkConnector.doStart(AbstractNetworkConnector.java:80) ~[metabase.jar:?]
通过将 SSL_PORT 更改为 8443 解决,因此新的 env 文件如下所示:
MB_DB_FILE=/metabase/metabase.db
MB_JETTY_SSL=true
MB_JETTY_SSL_PORT=8443
MB_JETTY_SSL_KEYSTORE=./keystore.jks
MB_JETTY_SSL_KEYSTORE_PASSWORD=my-pass
删除旧容器并使用上面的 env 文件启动一个新容器,但现在我遇到了这个错误:
ERROR metabase.core :: Metabase Initialization FAILED
java.lang.IllegalStateException: /"./keystore.jks" is not a valid keystore
我已经使用 this 仔细检查了我的 .jks 文件是否有效。确实如此。
我的问题是:
- 为什么我不能在 443 上运行它
- 为什么我的密钥库无效?
编辑 1:
遵循 Joakim 的建议:
改为绝对路径
MB_DB_FILE=/metabase-prod-data/metabase.db
MB_JETTY_SSL=true
MB_JETTY_SSL_PORT=8443
MB_JETTY_SSL_KEYSTORE=/root/services/metabase/setup/keystore.jks
MB_JETTY_SSL_KEYSTORE_PASSWORD=my-pass
遇到这个错误:
ERROR metabase.core :: Metabase Initialization FAILED
java.lang.IllegalStateException: /root/services/metabase/setup/keystore.jks is not a valid keystore
解决方法
443 是大多数操作系统上的受限端口,需要 root/超级用户/管理员权限才能绑定。
未找到您的密钥库,该路径无效。
错误只是令人困惑。
你的配置
MB_JETTY_SSL_KEYSTORE=./keystore.jks
尝试将其设为绝对路径,因为在您的情况下,元数据库显然只是将您提供的内容添加到其他路径 /
的末尾。
@Joakim 回答了为什么不使用端口 443
我在元数据库初始化时也遇到过这个问题。 我面临的错误是无法在 docker 容器内访问主机上的密钥库文件。
我使用了 docker-compose yml 文件。您也可以搜索基于终端的方式。
我通过使用卷属性在具有证书的主机上添加文件夹来使其可访问。
metabase:
...
env_file:
- ./config/metabase.env
volumes:
- <LOCAL_PATH>:<CONTAINER_PATH>
环境路径里面:
MB_JETTY_SSL_KEYSTORE:<CONTAINER_PATH>/keystore.jks
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。