AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题 / 76930356
Accepted
ealfonso
ealfonso
Asked: 2023-08-18 22:43:19 +0800 CST2023-08-18 22:43:19 +0800 CST 2023-08-18 22:43:19 +0800 CST

在基于 clojure 的 docker 容器中找不到 postgresql 库

  • 772

我正在运行一个需要访问本地数据库的 clojure 应用程序。clojure 应用程序正在使用 jdbc:

:dependencies [[org.clojure/clojure "1.10.0"]
                 ...
                 [org.clojure/java.jdbc "0.7.12"]
                 [org.postgresql/postgresql "42.3.3"]]

当直接在安装了 postgresql 版本的主机上运行时,即使连接到远程数据库,该应用程序也会按预期工作。

但是,当从基于映像的 docker 容器内运行时clojure:

# syntax=docker/dockerfile:1
   
FROM clojure
WORKDIR /ui-service
COPY . .
CMD ["lein", "ring", "server-headless", "3000"]
EXPOSE 3000

连接失败:

lan-activity-ui-service-1  | org.postgresql.util.PSQLException: ERROR: could not load library "/usr/lib/postgresql/13/lib/llvmjit.so": /lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib/x86_64-linux-gnu/libz3.so.4)
lan-activity-ui-service-1  |            QueryExecutorImpl.java:2675 org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse
lan-activity-ui-service-1  |            QueryExecutorImpl.java:2365 org.postgresql.core.v3.QueryExecutorImpl.processResults
lan-activity-ui-service-1  |             QueryExecutorImpl.java:355 org.postgresql.core.v3.QueryExecutorImpl.execute
lan-activity-ui-service-1  |                   PgStatement.java:490 org.postgresql.jdbc.PgStatement.executeInternal
lan-activity-ui-service-1  |                   PgStatement.java:408 org.postgresql.jdbc.PgStatement.execute
lan-activity-ui-service-1  |           PgPreparedStatement.java:166 org.postgresql.jdbc.PgPreparedStatement.executeWithFlags
lan-activity-ui-service-1  |           PgPreparedStatement.java:118 org.postgresql.jdbc.PgPreparedStatement.executeQuery
lan-activity-ui-service-1  |                          jdbc.clj:1090 clojure.java.jdbc/execute-query-with-params
lan-activity-ui-service-1  |                          jdbc.clj:1084 clojure.java.jdbc/execute-query-with-params
lan-activity-ui-service-1  |                          jdbc.clj:1113 clojure.java.jdbc/db-query-with-resultset*
lan-activity-ui-service-1  |                          jdbc.clj:1093 clojure.java.jdbc/db-query-with-resultset*
lan-activity-ui-service-1  |                          jdbc.clj:1182 clojure.java.jdbc/query
lan-activity-ui-service-1  |                          jdbc.clj:1144 clojure.java.jdbc/query
lan-activity-ui-service-1  |                          jdbc.clj:1160 clojure.java.jdbc/query
lan-activity-ui-service-1  |                          jdbc.clj:1144 clojure.java.jdbc/query
lan-activity-ui-service-1  |                              db.clj:33 ui-service.db/all-devices
lan-activity-ui-service-1  |                              db.clj:32 ui-service.db/all-devices
lan-activity-ui-service-1  |                         handler.clj:21 ui-service.handler/fn
lan-activity-ui-service-1  |                         handler.clj:20 ui-service.handler/fn
lan-activity-ui-service-1  |                           core.clj:158 compojure.core/wrap-response[fn]
lan-activity-ui-service-1  |                           core.clj:128 compojure.core/wrap-route-middleware[fn]
lan-activity-ui-service-1  |                           core.clj:137 compojure.core/wrap-route-info[fn]
lan-activity-ui-service-1  |                           core.clj:146 compojure.core/wrap-route-matches[fn]
lan-activity-ui-service-1  |                           core.clj:185 compojure.core/routing[fn]
lan-activity-ui-service-1  |                          core.clj:2701 clojure.core/some
lan-activity-ui-service-1  |                          core.clj:2692 clojure.core/some
lan-activity-ui-service-1  |                           core.clj:185 compojure.core/routing
lan-activity-ui-service-1  |                           core.clj:182 compojure.core/routing
lan-activity-ui-service-1  |                        RestFn.java:139 clojure.lang.RestFn.applyTo
lan-activity-ui-service-1  |                           core.clj:667 clojure.core/apply
lan-activity-ui-service-1  |                           core.clj:660 clojure.core/apply
lan-activity-ui-service-1  |                           core.clj:192 compojure.core/routes[fn]
lan-activity-ui-service-1  |                           json.clj:102 ring.middleware.json/wrap-json-params[fn]
lan-activity-ui-service-1  |                           json.clj:143 ring.middleware.json/wrap-json-response[fn]
lan-activity-ui-service-1  |                            cors.clj:47 jumblerg.middleware.cors/allow-origins
lan-activity-ui-service-1  |                            cors.clj:41 jumblerg.middleware.cors/allow-origins
lan-activity-ui-service-1  |                            cors.clj:57 jumblerg.middleware.cors/wrap-cors[fn]
lan-activity-ui-service-1  |                           Var.java:384 clojure.lang.Var.invoke
lan-activity-ui-service-1  |                          reload.clj:39 ring.middleware.reload/wrap-reload[fn]
lan-activity-ui-service-1  |                      stacktrace.clj:26 ring.middleware.stacktrace/wrap-stacktrace-log[fn]
lan-activity-ui-service-1  |                      stacktrace.clj:96 ring.middleware.stacktrace/wrap-stacktrace-web[fn]
lan-activity-ui-service-1  |                           jetty.clj:25 ring.adapter.jetty/proxy-handler[fn]
lan-activity-ui-service-1  |                       (Unknown Source) ring.adapter.jetty.proxy$org.eclipse.jetty.server.handler.AbstractHandler$ff19274a.handle
lan-activity-ui-service-1  |                 HandlerWrapper.java:97 org.eclipse.jetty.server.handler.HandlerWrapper.handle
lan-activity-ui-service-1  |                        Server.java:499 org.eclipse.jetty.server.Server.handle
lan-activity-ui-service-1  |                   HttpChannel.java:311 org.eclipse.jetty.server.HttpChannel.handle
lan-activity-ui-service-1  |                HttpConnection.java:258 org.eclipse.jetty.server.HttpConnection.onFillable
lan-activity-ui-service-1  |            AbstractConnection.java:544 org.eclipse.jetty.io.AbstractConnection$2.run
lan-activity-ui-service-1  |              QueuedThreadPool.java:635 org.eclipse.jetty.util.thread.QueuedThreadPool.runJob
lan-activity-ui-service-1  |              QueuedThreadPool.java:555 org.eclipse.jetty.util.thread.QueuedThreadPool$3.run
lan-activity-ui-service-1  |                        Thread.java:833 java.lang.Thread.run

如何确保 docker 容器中提供所需的依赖项?我是否需要使用多阶段 docker 构建来包含 postgresql 映像?或者是否可以纯粹在 java/clojure 中添加所需的依赖项?

我能够构建一个包含clojure 正在查找的/usr/lib/postgresql/13/目录和文件的容器,但奇怪的是我仍然收到错误::/usr/lib/postgresql/13/lib/llvmjit.soERROR: could not load library "/usr/lib/postgresql/13/lib/llvmjit.so"

# syntax=docker/dockerfile:1
   
FROM postgres:13 as postgres

FROM clojure
WORKDIR /ui-service
COPY . .
COPY --from=postgres /usr/lib/postgresql/ /usr/lib/postgresql/
RUN ls -l /usr/lib/postgresql/13/lib/llvmjit.so
CMD ["lein", "ring", "server-headless", "3000"]
EXPOSE 3000
postgresql
  • 3 3 个回答
  • 35 Views

3 个回答

  • Voted
  1. Best Answer
    James Elliott
    2023-08-18T23:06:19+08:002023-08-18T23:06:19+08:00

    虽然可以使用Pomegranate之类的工具从 Clojure 通过网络引入依赖项,并且 Clojure 1.12 本身的 alpha 版本中也提供了类似的功能,但构建自己的容器来添加必要的依赖项可能要简单得多到您正在使用的那个。

    • 2
  2. Alan Thompson
    2023-08-19T02:17:14+08:002023-08-19T02:17:14+08:00

    我有一个演示项目,展示了如何通过 Clojure 中的 Docker 容器使用 Postgres 和 H2。它使用该jdbc.next库。

    请注意,我们在 Docker 容器中运行 Postgres。该演示从命令行运行 Clojure。当然,您也可以在容器中运行 Clojure,只要它可以正常通过端口 5432 访问 Postgres 即可。

    Leiningen 正常用于定义 Clojure 项目及其依赖项:

    (defproject demo "0.1.0-SNAPSHOT"
      :license {:name "Eclipse Public License"
                :url  "http://www.eclipse.org/legal/epl-v10.html"}
    
      :dependencies [
                     [com.h2database/h2 "1.4.200"] ; #todo cannot upgrade yet or crash!
                     [hikari-cp "3.0.1"]
                     [org.clojure/clojure "1.11.1"]
                     [org.clojure/test.check "1.1.1"]
                     [org.postgresql/postgresql "42.6.0"]
                     [prismatic/schema "1.4.1"]
                     [seancorfield/next.jdbc "1.2.659"] ; #todo try porsas
                     [tupelo "23.07.04"]
                     ]
    
      :plugins      [[com.jakemccrary/lein-test-refresh "0.25.0"]
                     [lein-ancient "0.7.0"]
                     ]
    
    <snip>
    )
    

    一个简短的 BASH 脚本启动 Postgres:

    #!/bin/bash
    
    docker run --rm  --name pg-docker  --env POSTGRES_PASSWORD=docker  --detach  --publish 5432:5432  \
      -v $HOME/docker/volumes/postgres:/var/lib/postgresql/data    postgres:14
    

    然后使用以下命令运行演示lein:

    > lein clean ; lein test
    
    -----------------------------------
       Clojure 1.10.3    Java 17.0.1
    -----------------------------------
    
    lein test tst.demo.jdbc-h2
    
    lein test tst.demo.jdbc-postgres
    
    Ran 7 tests containing 42 assertions.
    0 failures, 0 errors.
    

    有关完整详细信息,请参阅自述文件。

    • 0
  3. ealfonso
    2023-08-19T10:18:12+08:002023-08-19T10:18:12+08:00

    我看到的错误与 JDBC 客户端无关,它是服务器端错误,可能与服务器上的 bullseye -> bookworm 升级有关。JDBC Postgresql确实是一个纯java客户端,不需要查找非java共享库。

    • 0

相关问题

  • 尽管违反了部分索引约束,Postgres 插入仍在发生

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    使用 <font color="#xxx"> 突出显示 html 中的代码

    • 2 个回答
  • Marko Smith

    为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类?

    • 1 个回答
  • Marko Smith

    您可以使用花括号初始化列表作为(默认)模板参数吗?

    • 2 个回答
  • Marko Smith

    为什么列表推导式在内部创建一个函数?

    • 1 个回答
  • Marko Smith

    我正在尝试仅使用海龟随机和数学模块来制作吃豆人游戏

    • 1 个回答
  • Marko Smith

    java.lang.NoSuchMethodError: 'void org.openqa.selenium.remote.http.ClientConfig.<init>(java.net.URI, java.time.Duration, java.time.Duratio

    • 3 个回答
  • Marko Smith

    为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)?

    • 4 个回答
  • Marko Smith

    为什么库中不调用全局变量的构造函数?

    • 1 个回答
  • Marko Smith

    std::common_reference_with 在元组上的行为不一致。哪个是对的?

    • 1 个回答
  • Marko Smith

    C++17 中 std::byte 只能按位运算?

    • 1 个回答
  • Martin Hope
    fbrereto 为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类? 2023-12-21 00:31:04 +0800 CST
  • Martin Hope
    比尔盖子 您可以使用花括号初始化列表作为(默认)模板参数吗? 2023-12-17 10:02:06 +0800 CST
  • Martin Hope
    Amir reza Riahi 为什么列表推导式在内部创建一个函数? 2023-11-16 20:53:19 +0800 CST
  • Martin Hope
    Michael A fmt 格式 %H:%M:%S 不带小数 2023-11-11 01:13:05 +0800 CST
  • Martin Hope
    God I Hate Python C++20 的 std::views::filter 未正确过滤视图 2023-08-27 18:40:35 +0800 CST
  • Martin Hope
    LiDa Cute 为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)? 2023-08-24 20:46:59 +0800 CST
  • Martin Hope
    jabaa 为什么库中不调用全局变量的构造函数? 2023-08-18 07:15:20 +0800 CST
  • Martin Hope
    Panagiotis Syskakis std::common_reference_with 在元组上的行为不一致。哪个是对的? 2023-08-17 21:24:06 +0800 CST
  • Martin Hope
    Alex Guteniev 为什么编译器在这里错过矢量化? 2023-08-17 18:58:07 +0800 CST
  • Martin Hope
    wimalopaan C++17 中 std::byte 只能按位运算? 2023-08-17 17:13:58 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve