在docker容器内使用带有ssl的selfhosted (Jetty) Metabase时出错 &



我正在尝试在启用ssl的docker容器中设置一个自托管(Jetty)元数据库。

首先,我使用certbot创建了fullchain.pemprivkey.pem,然后使用此gist转换为keystore.jks

然后创建一个.env文件,用于--env-filedocker标志:

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

And try run:

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

我已经仔细检查了我的。jks文件是否有效。

我的问题是:

  1. 为什么不能在443上运行
  2. 为什么我的密钥库无效?编辑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端口没有被使用@Joakim回答

我在元数据库初始化时也面临这个问题。我所面临的错误是主机上的keystore文件无法在docker容器中访问。

我使用docker-compose yml文件。您也可以搜索基于终端的方式。

我通过使用volume属性在主机上添加具有证书的文件夹来访问它。

metabase:
...
env_file:
- ./config/metabase.env
volumes:
- <LOCAL_PATH>:<CONTAINER_PATH>

环境内部路径:

MB_JETTY_SSL_KEYSTORE:<CONTAINER_PATH>/keystore.jks

443在大多数操作系统上是一个受限制的端口,需要root/超级用户/管理员权限才能绑定到它。

没有找到您的密钥存储库,该路径无效。
这个错误让人很困惑。

的配置
MB_JETTY_SSL_KEYSTORE=./keystore.jks

尝试使其成为绝对路径,因为元数据库显然只是将您给它的内容添加到其他路径/的末尾。

最新更新