当前位置: 首页 > 知识库问答 >
问题:

Quarkus docker容器无法运行/连接到数据库

马德厚
2023-03-14

在我的项目中,当我运行后端时,使用Quarkus、Angular和PostgreSQL DB

quarkus.datasource.db-kind=postgresql
quarkus.datasource.username= username
quarkus.datasource.password= pwd
quarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/db-mcs-thirdparty
quarkus.flyway.migrate-at-start=true
quarkus.flyway.baseline-on-migrate=true
quarkus.flyway.out-of-order=false
quarkus.flyway.baseline-version=1

这是我放在后端文件夹(Quarkus)中的“docker-compose.yml”文件:

version: '3.8'
services:
  db:
    container_name: pg_container
    image: postgres:latest
    restart: always
    environment:
      POSTGRES_USER: username
      POSTGRES_PASSWORD: pwd
      POSTGRES_DB: db-mcs-thirdparty
    ports:
      - "5432:5432"

  pgadmin:
      container_name: pgadmin4_container
      image: dpage/pgadmin4
      restart: always
      environment:
        PGADMIN_DEFAULT_EMAIL: usernamepgadmin
        PGADMIN_DEFAULT_PASSWORD: pwdpgadmin
      ports:
        - "5050:80"

但是当我构建一个Quarkus泊坞窗映像并尝试在泊坞窗容器中运行它时,它失败了!知道角度泊坞站容器运行良好,数据库也是如此。以下是我在运行容器后获得的错误日志

使用 /opt/jboss/容器/java/运行/运行 java.sh 启动 Java 应用程序...

__  ____  __  _____   ___  __ ____  ______
 --/ __ \/ / / / _ | / _ \/ //_/ / / / __/
 -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/

2022-05-06 12:58:31,967 WARN  [io.agr.pool] (agroal-11) Datasource '<default>': The connection attempt failed.
2022-05-06 12:58:32,015 ERROR [io.qua.run.Application] (main) Failed to start application (with profile prod): java.net.UnknownHostException: db

at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:229)
at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.base/java.net.Socket.connect(Socket.java:609)
at org.postgresql.core.PGStream.createSocket(PGStream.java:241)
at org.postgresql.core.PGStream.<init>(PGStream.java:98)
at org.postgresql.core.v3.ConnectionFactoryImpl.tryConnect(ConnectionFactoryImpl.java:109)
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:235)
at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49)
at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:223)
at org.postgresql.Driver.makeConnection(Driver.java:400)
at org.postgresql.Driver.connect(Driver.java:259)
at io.agroal.pool.ConnectionFactory.createConnection(ConnectionFactory.java:210)
at io.agroal.pool.ConnectionPool$CreateConnectionTask.call(ConnectionPool.java:513)
at io.agroal.pool.ConnectionPool$CreateConnectionTask.call(ConnectionPool.java:494)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at io.agroal.pool.util.PriorityScheduledExecutor.beforeExecute(PriorityScheduledExecutor.java:75)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1126)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829)

因此,我在中替换了“localhost”:

quarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/db-mcs-thirdparty

使用IP地址,使用DB的名称,即使我试图在同一行中输入用户名和psw,等等......,但不起作用。

我甚至停止了所有正在运行的容器(DB,frontend)并试图只运行Quarkus容器,同样的情况也会发生。对于我使用的端口,您可以查看附件中的图片。使用的端口

应如何解决此问题?提前感谢您。

共有2个答案

章誉
2023-03-14

您可以使用网络模式主机(< code> -网络主机)运行Quarkus容器,如下例所示:

$ docker run --rm -d --network host --name my_nginx nginx

https://docs.docker.com/network/network-tutorial-host/

您还可以将Quarkus添加到docker compose中,如下所示:

https://github.com/quarkusio/quarkus-quickstarts/blob/main/kafka-quickstart/docker-compose.yaml

任绪
2023-03-14

应用程序中声明的本地主机url。属性文件引用容器自己的系统本地主机。这意味着您的quarkus应用程序容器正在其自己的本地端口上寻找此端口。

据我所知,每一个docker容器和每一个启动的docker都会组成。yaml创建自己的网络,只有在该网络中,启动的服务才能通过其服务名称进行连接。

因此,您的quarkus docker容器必须连接到docker-compose启动的服务。一种解决方案是在一个docker-compose.yaml中定义所有服务(数据库、角度和后端),然后在url中引用服务名。

另一个解决方案是使用< code > host . docker . internal 而不是< code>localhost。

关于docker网络和host.docker.internal的更多信息如下:https://docs.docker.com/desktop/windows/networking/

 类似资料:
  • 问题内容: 遵循此示例:https : //docs.docker.com/engine/examples/mongodb/ 当尝试使用以下命令连接到mongoDB时:( 其中ip是boot2docker ip的名称)+ docker ps的端口号: 27017 / tcp 或-P 0.0.0.0:49155->27017/tcp 无论哪种方式,我都会收到以下错误: 警告:无法连接到ip:2701

  • 我正试图从PHP容器连接到容器化的MySQL数据库,虽然同一网络上的所有容器都是如此,但问题是,当我点击

  • 我试图部署一个与主机数据库一起工作的Drupal6Docker容器(在将其部署到远程数据库之前出于测试目的),但它就是不想工作,尽管我找到了不同的建议。(特别是在这个来自Docker容器内部的问题中,我如何连接到机器的本地主机?当它谈到主机模式时,所以即使这个问题看起来很像,它也不觉得它是重复的) DockerFile Docker-compose.yml 对于数据库连接,我指定了以下设置: 驱动

  • 我已经创建了一个MySQL数据库的映像,并在容器中运行它。我希望它在端口3406/3407上运行,因此我调用docker run命令如下所示: 如果我看我的容器,它看起来是这样的: 我非常想连接到我的数据库现在,但我似乎不能使我的URL工作。 这是我的URL的样子:

  • 问题内容: 我有用于创建mysql映像的docker- compose文件,并将端口公开给3306,但是当我尝试安装CMS时,出现了无法连接数据库的错误。我尝试扫描端口3306,并向我显示它已打开,因此mysql正在运行。 为什么两个Docker容器彼此看不到? 这是我的docker-compose文件: 问题答案: 要连接到数据库,请使用您作为主机名提供的链接/别名。因此,您的CMS可以使用主机

  • 问题内容: 我需要使用docker-compose创建Rails和Mysql容器。当我尝试使用创建容器之间的链接时,我得到 无法启动容器9b271c58cf6aecaf017dadaf5b无法链接到未运行的容器:/ puma_db_1 AS / puma_web_1 / db 档案 Docker文件 docker-compose.yml 问题答案: 容器很可能无法启动。 仅启动服务以确保其正常运行