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

无法与MySQL服务器连接到Docker中的Spring应用程序?

宫子晋
2023-03-14
 tomcat container
    FROM tomcat:8.0.20-jre8
    COPY /target/CTH.war /usr/local/tomcat/webapps/
  version: '3'
services:
  mysql-standalone:
    image: 'mysql:5.7'
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    volumes:
      - ./docker/provision/mysql/init:/docker-entrypoint-initdb.d
    environment:
      - MYSQL_ROOT_PASSWORD= root
      - MYSQL_USER= root
      - MYSQL_PASSWORD= root
      - MYSQL_DATABASE= CTH
      - MYSQL_DATABASE= CTH_CHAT
    ports:
      - "3307:3306"
  cth-docker-container:
    image: cth-docker-container
    ports:
      - "8082:8082"
    environment:
      CTH_DATASOURCE_DATABASE: CTH
      CTH_DATASOURCE_SERVERNAME: mysql-standalone
      CTH_DATASOURCE_USERNAME: root
      CTH_DATASOURCE_PASSWORD: root
      CTH_DATASOURCE_PORT: 3307

      CTH_CHAT_DATASOURCE_DATABASE: CTH_CHAT
      CTH_CHAT_DATASOURCE_SERVERNAME: mysql-standalone
      CTH_CHAT_DATASOURCE_USERNAME: root
      CTH_CHAT_DATASOURCE_PASSWORD: root
      CTH_CHAT_DATASOURCE_PORT: 3307

    build:
      context: "./"
      dockerfile: "Dockerfile"
    depends_on:
      - mysql-standalone

application.properties:这是spring mvc应用程序,应用程序使用带有两个数据库的MySQL db

1st db
dbuser.local=${CTH_DATASOURCE_USERNAME:root}
dbpassword.local=${CTH_DATASOURCE_PASSWORD:root}
dbdatabaseName.local=${CTH_DATASOURCE_DATABASE:CTH}
dbserverName.local=${CTH_DATASOURCE_SERVERNAME:localhost}
dbportNumber.local=${CTH_DATASOURCE_PORT:3306} 

2nd db
dbuser.cth.chat.local=${CTH_CHAT_DATASOURCE_USERNAME:root}
dbpassword.cth.chat.local=${CTH_CHAT_DATASOURCE_PASSWORD:root}
dbdatabaseName.cth.chat.local=${CTH_CHAT_DATASOURCE_USERNAME:CTH_CHAT}
dbserverName.cth.chat.local=${CTH_CHAT_DATASOURCE_SERVERNAME:localhost}
dbportNumber.cth.chat.local=${CTH_CHAT_DATASOURCE_PORT:3306}

我阅读了创建dockerfile和docker-compose文件的文章https://medium.com/@asce4s/dockerize-spring-mvc-application-a9ffbd11eadb https://github.com/abagayev/docker-bootstrap-collection/tree/master/mysql-figh-databases/docker/provision/mysql/init

但当我执行docker-compose-f docker-compose.yml时,会出现错误

如果我设置了错误的环境或者我的方法不正确,你有什么建议,我一定会帮助我的,谢谢!

共有1个答案

楚涵润
2023-03-14

在阅读了大量文章之后,我成功地在docker容器中使用MySQL db并在MySQL Workbench中访问应用程序。

这是我的docker-compose文件

version: '3'

services:
  app:
    container_name: cth-app
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - '8080:8080'
    environment:
      ##db1
      CTH_DATASOURCE_DATABASE: CTH
      CTH_DATASOURCE_HOST: mysqldb
      CTH_DATASOURCE_USERNAME: cth
      CTH_DATASOURCE_PASSWORD: root
      CTH_DATASOURCE_PORT: 3306

      ##db2
      CTH_CHAT_DATASOURCE_DATABASENAME: CTH_CHAT
      CTH_CHAT_DATASOURCE_HOST: mysqldb
      CTH_CHAT_DATASOURCE_USERNAME: cth
      CTH_CHAT_DATASOURCE_PASSWORD: root
      CTH_CHAT_DATASOURCE_PORT: 3306
    depends_on:
      - mysqldb

  mysqldb:
    image: mysql/mysql-server:5.7
    container_name: mysqldb
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    ##here i am able to access dump file which I'll create two databases 
      with user created for me.
    volumes:
      - ./docker/provision/mysql/init:/docker-entrypoint-initdb.d
    ports:
      - '3308:3306'
    environment:
        MYSQL_ROOT_PASSWORD: root
        MYSQL_USER: cth
        MYSQL_PASSWORD: root

您需要创建一个转储文件,请参阅文章[https://github.com/abagayev/docker-bootstrap-collection/tree/master/mysql-figh-databases]

当您将docker-compose up-d--build

您的应用程序在端口8080上运行,MySQL DB在主机内运行

谢谢!

 类似资料:
  • 我的grails 2.1.0应用程序是在cloudfoundry中部署和运行的,使用mysql服务,昨天我做了一些更改,更新后无法再次运行。我没有对数据源进行任何更改。 通过查看tomcat日志,看起来数据库设置在部署时没有被覆盖,如文档中所述,并且存在一个异常消息“无法为连接URL“JDBC:h2:prodDb;MVCC=TRUE”创建类为“com.mysql.JDBC.driver”的JDBC

  • 问题内容: 我有MySQL的Laravel应用程序,我正在尝试使用docker-compose在Docker中运行它。但是,当应用尝试连接数据库时,它会抛出: Connector.php 55行中的PDOException:SQLSTATE [HY000] [2002]无法通过套接字’/var/run/mysqld/mysqld.sock’连接到本地MySQL服务器(2) 我的docker-com

  • 问题内容: 我想用dockerized postgres运行dockerized Django应用程序。 我使用以下命令运行dockerized Django应用程序: 我使用以下命令运行dockerized postgres: 我的postgres配置是postgres docker容器文档中 建议的默认配置。它实际上是一个包含以下内容的配置文件 我对两个容器使用 相同的 环境变量: 我的数据库

  • 我已经运行了MYSQL容器,我能够执行它,并且能够使用“MYSQL-h 172.17.0.2-u root-p”从主机连接。我已经执行“docker run--name=mysql-host-e mysql_root_password=root-d mysql:5.7.32”来运行docker映像。 但是,当我试图通过spring boot应用程序访问时,它会拒绝以下应用程序中的属性。proper

  • 和DocerFile 很好笑因为...首先,我想把容器的名称“localhost”更改为另一个。但当我改变的时候,我不能运行Spring Bot应用程序,即使从IntelliJ。我在docker中创建了MySql的映像,并尝试在IntelliJ中进行连接。这是warking但当我想使用SpringBoot应用程序在caontainer然后是问题。我还没找到解决办法。我会非常感谢每一个帮助。 我在这

  • 我遵循了Microsoft的官方文档,并安装了SQL Server Docker image 因此,我有一个SQL服务器映像在IP地址的Docker上运行172.17.0.2 我还可以使用带有虚拟密码的sqlcmd轻松连接到它 问题是我无法通过SSMS连接到它: 当然,在发布这个问题之前,我阅读了其他StackOverflow帖子,我尝试了多次登录: 本地主机,1433 如果localhost不能