我是 Docker 新手。我正在尝试对我的 Spring Boot 应用程序进行 dockerize,但出现错误 连接到本地主机:5432被拒绝。 Spring Boot 应用程序具有 postgresql 数据库连接,并使用随机端口在 Tomcat 上运行。 请查看以下详细信息,请求您检查并帮助解决问题。由于我是 Docker 新手,请给出详细的解决方案。
Dockerfile
FROM openjdk:8-jdk-alpine
ARG JAR_FILE=target/SpringConversionFactor-0.0.1-SNAPSHOT.jar
WORKDIR /opt/app
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","app.jar"]
Docker 运行
docker run springconversionfactor
异常
Connection to localost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections
当您在 docker 中运行任何应用程序时,它会与现有环境隔离。在这里,您在 docker 中运行 spring boot 应用程序,并提供 postgresql url 作为 localhost:5432,因为您的 spring boot 应用程序正在您的容器中查找 postgres db spring boot docker 容器。请确保 您的 postgres 数据库正在运行。如果它在您的服务器上运行,请将 url 指定为 server_ip:5432 或者如果它在其他容器中运行,则将其指定为 container_name:5432 (在这里您也可以与您的服务器进行端口映射)。
我遇到了同样的问题,这就是我解决它的方法。 从 docker 运行 postgres 映像。将为此创建一个容器。 运行以下命令获取运行 postgres 镜像的容器 id:
docker ps -a
这将列出容器。
复制 postgres 容器的 id(通常是第一列)(例如:b5095a58da29):
运行以下命令获取其IP:
docker inspect b5095a58da29
它将列出一个带有一些属性的大 JSON。从“IPAddress”属性中复制 IP(例如:173.18.0.2)。 如您所见,这是在“网络”->“桥接”部分中。
现在,进入Spring Boot的application.properties文件并为postgresql连接写入正确的IP。
# Set here configurations for the database connection
spring.datasource.url=jdbc:postgresql://173.18.0.2:5432/mydb
spring.datasource.username=admin
spring.datasource.password=admin
spring.datasource.driver-class-name=org.postgresql.Driver
现在重建 Spring 应用程序的 jar,重新制作 Spring 应用程序映像并使用 docker 运行它。 对我来说,此后效果很好。 我将在这里写下我使用的其他命令:
docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=admin -e POSTGRES_USER=admin -e POSTGRES_DB=mydb -v //C/Work/Docker/PostgreSql:/var/lib/postgresql/data --name=postgres_con postgres
docker build -t spring-app .
docker run -p 8080:8080 spring-app