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

Docker Compose:将JDBC从localhost更改为mysql

乐正光誉
2023-03-14

我目前正试图找到一种独特的解决方案,用于在CI管道上本地和远程运行我的项目。在git上,我通过设置applicationContext的bean数据源url使一切正常工作。xml,如下所示:

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://mysql:3306/project" />
    ...
</bean>

但是,我无法配置docker compose文件,使其可以使用与前面所示相同的url。相反,它仍然需要本地主机jdbc:mysql://localhost:3306/project

我想我需要在docker compose文件中添加一些额外的网络字段,以便使用jdbc:mysql://mysql:3306/project本地也一样,但我现在还没有弄清楚。

我目前的docker-compose.yml修改:

version: '3.3'
services:
  tomcat:
    image: tomcat:9-jre11
    volumes:
      - ./target:/usr/local/tomcat/webapps
    ports:
      - "8080:8080"
  mysql:
    image: mysql:latest
    environment:
      MYSQL_USER: mysql_user
      MYSQL_PASSWORD: mysql_password
      MYSQL_ROOT_PASSWORD: mysql_root_password
      MYSQL_DATABASE: mysql_database
    ports:
      - "3306:3306"

如果我使用mysql url而不是本地url,则在本地运行项目会导致以下错误消息:

Caused by: java.net.UnknownHostException: mysql

共有2个答案

严兴旺
2023-03-14

这种情况有时会发生,

你是在swarm模式下部署的吗?

无论如何,docker compose文件中针对单个节点的修复如下所示。

version: '3.3'
services:
  tomcat:
    image: tomcat:9-jre11
    volumes:
      - ./target:/usr/local/tomcat/webapps
    ports:
      - "8080:8080"
    networks:
    - mynetwork

  mysql:
    image: mysql:latest
    environment:
      MYSQL_USER: mysql_user
      MYSQL_PASSWORD: mysql_password
      MYSQL_ROOT_PASSWORD: mysql_root_password
      MYSQL_DATABASE: mysql_database
    ports:
      - "3306:3306"
    networks:
    - mynetwork

networks:
  mynetwork:

特别是在多个节点的swarm中:

docker network create mynetwork --driver overlay --attachable

撰写文件:

version: '3.3'
services:
  tomcat:
    image: tomcat:9-jre11
    volumes:
      - ./target:/usr/local/tomcat/webapps
    ports:
      - "8080:8080"
    networks:
    - mynetwork

  mysql:
    image: mysql:latest
    environment:
      MYSQL_USER: mysql_user
      MYSQL_PASSWORD: mysql_password
      MYSQL_ROOT_PASSWORD: mysql_root_password
      MYSQL_DATABASE: mysql_database
    ports:
      - "3306:3306"
    networks:
    - mynetwork

networks:
  mynetwork:
    external: true
郝玄天
2023-03-14

听起来你是在docker之外的本地启动应用程序,对吗?

在这种情况下,不是一个完美的解决方案,因为你必须在每个桌面上单独做,但是你可以添加到你的/etc/host,"mysql"主机到localhost映射:

127.0.0.1       mysql

尽管如此,我建议在tomcatdocker映像上运行您的应用程序,或者为CI和本地环境进行单独的配置。

 类似资料:
  • 两个月来,我一直在修改wordpress网站的本地版本。 所有的更改都是在我的本地主机版本上的自定义主题目录中进行的,例如custom-template-page-functions.php和style.css。 当我在localhost网站上工作时,live网站得到了更多的文章和内容。 现在我想知道什么是最有感情的方式将这些变化添加到现场。

  • 问题内容: 是的,我的应用程序服务器在https上运行。客户端要求将肥皂地址从http更改为https。 客户要求每当他想要2通过浏览器看到wsdl时,soap地址应为https 我已经在axis2.xml中添加了它… 我在service.xml中添加了以下内容 在关闭标签之后,但它给了我下面的错误。 它给了我例外 问题答案: service.xml中 有一个错字。它应该是 : 不是HTTPS。

  • 本文向大家介绍在MySQL中将列名从StudentName更改为FirstName?,包括了在MySQL中将列名从StudentName更改为FirstName?的使用技巧和注意事项,需要的朋友参考一下 使用带有ALTER语句的CHANGE。让我们首先创建一个表- 现在检查表的描述- 输出结果 这将产生以下输出- 这是使用ALTER的查询- 现在再次检查表的描述- 输出结果 这将产生以下输出-

  • 当我想用PHPMyAdmin将MySQL字符集从utf8(utf8\u general\u ci)更改为utf8mb4(utf8\u unicode\u ci)时,我做这些事情就足够了吗? 将数据库归类更改为utf8_unicode_ci 将表排序规则更改为utf8_unicodel_ci 将每个文本列更改为utf8_unicodel_ci 将我的PHP代码中的set_charset更改为utf8

  • 问题内容: 我试图在事实发生后修改表使其成为主键列。我尝试了以下SQL,但收到语法错误通知。 我做错什么了吗? 问题答案:

  • 问题内容: 我有以下代码: 如何更改此代码: 使其可以像JSONP一样工作…这完全不同吗? 问题答案: 实际上,您只需要添加,剩下的就由jQuery完成。