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

连接拒绝:运行Docker Compose时

吕英才
2023-03-14

我是码头工人的新宝宝。我正在Spring Boot应用程序中使用docker。下面是我的档案。

application.properties文件:

spring.datasource.url=jdbc:mysql://${DATABASE_HOST}:3306/${DATABASE_NAME}?allowPublicKeyRetrieval=true&useSSL=true
spring.datasource.username = root
spring.datasource.password = root
server.port=8443
FROM openjdk:latest
ADD target/app.jar app.jar
EXPOSE 8443
ENTRYPOINT ["java","-jar","app.jar", "--spring.profiles.active=docker"]
version: '3.1'
services:
  mysqlDb:
    image: mysql:latest
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=springdemo
      - MYSQL_USER=root
      - MYSQL_PASSWORD=root
      - DATABASE_HOST= 192.168.0.1
    volumes:
      - /data/mysql
    ports:
    - "3306:3306"
    container_name: mysql-db

  springbootdocker:
    image: xyz/signup
    restart: always
    ports:
      - "8080:8080"
    depends_on:
      - mysqlDb
    links:
      - mysqlDb   
    environment:
      - DATABASE_HOST= mysqlDb
      - DATABASE_USER=root
      - DATABASE_PASSWORD=root
      - DATABASE_NAME=springdemo
      - DATABASE_PORT=3306
    healthcheck:
      test: ["CMD","curl","-f","http://localhost:8080/health"]
      interval: 1m30s
      timeout: 10s 
      retries: 3 

问题的第一部分解决了:当我运行应用程序时,我得到以下错误:

Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.



Caused by: java.net.UnknownHostException: ${DATABASE_HOST}

1)我想要达到的-

  • 希望为我的应用程序创建一个jar。
  • 创建jar后,我要从jar创建映像
  • 创建应用程序的映像后,我想推入docker集线器。
  • 从其他服务器运行docker-compose.yml文件。它将从docker集线器获取mysql和映像,并在另一个端口中运行应用程序,如docker-compose所述。

问题来了:

>

  • 当我试图在本地运行应用程序时,只有在application.Properties类中编写这一行时,才能够创建jar。

    spring.datasource.url=jdbc:mysql:/127.0.0.1:3306/springdemo?AllowPublicKeyRetrieval=true&usessl=true

    >

  • 所以,我想,我正在不同的系统/服务器中运行docker-compose。那里的ip地址不同。

    所以,我把url改成了这个:

    spring.datasource.url=jdbc:mysql:/192.168.0.1:3306/springdemo?AllowPublicKeyRetrieval=true&usessl=true

    192.168.0.1 - this ip is for the diffrent server, where i want to run the docker-compose file
    

    但是当我运行spring boot应用程序时,我无法运行该应用程序,因为它会出现与上面提到的几乎相同的错误,即连接拒绝。所以我无法创建这个罐子,无法创建图像。所以我的想法在这里也失败了。

    • 然后,我又想到了一个想法,我们不能把动态ip地址放入application.properties文件中吗,所以我尝试了这行:

    spring.datasource.url=jdbc:mysql:/${DATABASE_HOST}:3306/${DATABASE_NAME}?AllowPublicKeyRetrieval=true&usessl=true

    DATABASE_HOST-您可以在docker-compose文件中找到它

    我想可能是这样的:${DATABASE_HOST},将从docker-compose中选择DATABASE_HOST的值。

    但是我的想法失败了,我在运行应用程序时遇到了top中提到的错误。无法创建jar,因此无法创建映像。

    http://localhost:8080/dockerex
    

    在我的Controller类中:

    @RestController
    @RequestMapping(value = "/dockerex")
    public class SpringBootDockerController {
    
        @GetMapping
        public String check() {
            return "checking";
        }
    }
    

    当我检查容器时,ip地址为空:conatiner的快照:

    [
     {
         "Id": "7664bab5ed452e3e2243e1802010240ab5a3eb817af6164e985b10e729ff4c8f",
         "Created": "2020-02-04T17:30:08.5351511Z",
         "Path": "java",
         "Args": [
             "-jar",
             "app.jar",
             "--spring.profiles.active=docker"
         ],
         "State": {
             "Status": "running"
    .......................
    "PortBindings": {
                 "8080/tcp": [
                     {
                         "HostIp": "",
                         "HostPort": "8080"
                     }
                 ]
             },
    
  • 共有1个答案

    郝永思
    2023-03-14

    很好,它工作了,但是在这里您看到您以前使用的是DB_HOST,现在您使用的是database_host=mysqlDb,它当前指向您的mysql服务名称。可以在docker Compose创建的单个网络中发现该服务名称。您正在硬编码db_host=192.168.0.1并尝试使用此IP进行连接,该IP在docker compose创建其网络时无效。

     类似资料:
    • 我的docker撰写文件如下所示: 如果我在浏览器中键入http://localhost:15672,我将获得Rabbitmq界面,但是如果我试图像这样从我的探索项目连接: 然后它在队伍中断了 错误是说 ExtendedSocketException:连接被拒绝127.0。0.1:5672系统。网插座。插座EndConnect(IAsyncResult异步结果) ConnectFailureExc

    • 我在学Angularjs。作为其中的一部分,我想学习使用端到端测试。目前,我有一个目录结构如下所示: 运行该命令时,收到以下错误: 我做错了什么?

    • 我使用的是Postgres 9.1.5。JDBC在第一个实例中运行良好,但当我再次尝试时,它开始拒绝连接。例如,我使用JDBC登录到我的web应用程序,效果很好。但是,我尝试使用连接获取其他数据,它引发了一个异常:连接被拒绝。我确信我的代码没有问题,因为上次运行良好的登录JDBC也引发了一个异常:连接被拒绝。 重新启动postgres windows服务后,它再次工作。然后,登录JDBC,获取一些

    • 我试图实现一个TCP连接,在服务器端一切正常,但当我运行客户端程序(从客户端计算机)时,我得到以下错误: 服务器代码: 客户端代码:

    • 我试图通过Jedis客户端连接到redis服务器,但在连接时我得到了以下异常和堆栈跟踪- redisconnectionFailureException:无法获得Jedis连接;嵌套异常是redis.clients.jedis.exceptions.jedisconnectionException:无法从位于org.springframework.data.redis.connection.jed