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

在docker compose中运行java

荆利
2023-03-14

这是我的docker-commentfile.yaml:

version: '3.3'

services:
  db:
    container_name: dbContainer
    image: mysql:5.7
    volumes:
    - /home/crismon-01/Documenti/TESI/Docker/mysqlLogin/datas:/var/lib/mysql
    ports:
    - 3306
    environment:
     MYSQL_ROOT_PASSWORD: "root"
     MYSQL_USER: "root"
     MYSQL_PASSWORD: "root"
     MYSQL_DATABASE: "schema1"
  java:
    container_name: loginJava
    image: openjdk:7
    depends_on:
    - db
    volumes:
    - ./home/crismon-01/Documenti/TESI/Docker/mysqlLogin:/usr/src/myapp 
    working_dir: /usr/src/myapp
    command: bash -c "java -jar LogiIn.jar"

这是一个由两个cotnainer组成的组合,一个使用mysql,一个使用Java代码,使用db,现在我需要运行它,我有一个错误:

crismon-01@crismon01-XPS15:~/Documenti/TESI/Docker/mysqlLogin$ docker-compose up
Starting dbContainer ... done
Starting mysqllogin_java_1 ... done
Attaching to dbContainer, mysqllogin_java_1
dbContainer | Initializing database
dbContainer | 2018-04-12T15:35:07.134004Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
dbContainer | 2018-04-12T15:35:07.135231Z 0 [ERROR] --initialize specified but the data directory has files in it. Aborting.
dbContainer | 2018-04-12T15:35:07.135247Z 0 [ERROR] Aborting
dbContainer | 
java_1  | Error: Unable to access jarfile LogiIn.jar
dbContainer exited with code 1
mysqllogin_java_1 exited with code 1

有人知道错误的原因吗?

共有2个答案

缑高朗
2023-03-14

测试容器库支持Docker Comment

引用官方文件

单一类规则,指向docker compose。yml文件,应足以启动测试所需的任何数量的服务:

 @ClassRule public static DockerComposeContainer environment =
     new DockerComposeContainer(new File("src/test/resources/compose-test.yml"))
             .withExposedService("redis_1", REDIS_PORT)
             .withExposedService("elasticsearch_1", ELASTICSEARCH_PORT); 

在本例中,编写测试。yml应包含以下内容:

redis:   image: redis elasticsearch:   image: elasticsearch

有关更多详细信息,请参阅官方文档https://www.testcontainers.org/modules/docker_compose/

漆雕成弘
2023-03-14

问题是您正在java服务的compose部分指定命令部分。似乎只有最后一个被拿走了。

解决办法是将这两个命令分组为一个命令

java:
  image: openjdk:7
  depends_on:
  - db
  volumes:
  - /home/crismon-01/Documenti/TESI/Docker/mysqlLogin:/usr/src/myapp 
  command: bash -c "cd /usr/src/myapp && java -jar LogiIn.jar"

看看如何使用Docker Compose,如何执行多个命令以获取更多信息。

或者,您只能设置working_dir属性并删除cd命令。

  volumes:
  - /home/crismon-01/Documenti/TESI/Docker/mysqlLogin:/usr/src/myapp 
  working_dir: /usr/src/myapp
  command: java -jar LogiIn.jar
 类似资料:
  • 问题内容: 有没有办法在Java应用程序中运行此命令行? 我可以用命令运行它,但是我不能在Java中运行它。 问题答案:

  • 我正在用IntelliJ开发一个小型JavaFX应用程序。 我已经用Intellij工件将它编译成一个jar,它在windows中可以很好地工作,无论是从命令行还是双击jar。 应用程序需要整天运行,我选择使用覆盆子,因为我认为这是最便宜的方式。 我在Raspbian上安装了它,来自Oracle的JDK 8 Oracle网站上的最后一个ARM版本 JVM正在工作,并使用显示正确的版本。我假设安装是

  • Hi我正在使用xslt转换器和xsl文件,我正在使用函数ex: date-time(),它在Anypoint Studio中运行,但当我尝试在cloud dHub中运行时,它会抛出错误 无法找到名为{http://exslt.org/dates-and-times}date-time()的匹配0参数函数。没有本地名称date-time的Saxon扩展函数(net.sf.saxon.trans.XP

  • 我正在尝试执行这个代码是pycharm 但我总是犯这个错误 但我可以使用terminal运行相同的代码

  • 我得到 它不包含我在NetBeans中使用的jdk的路径。我没有找到一种方法告诉Java我想使用另一个jdk,所以我尝试了不使用: 运行特定主文件的示例 在java.lang.class.PrivateGetMethodRecursive(class.java:3048) 在java.lang.class.GetMethod0(class.java:3018) 在java.lang.class.G

  • 问题内容: 我已经阅读了以前发布的问题。有些含糊不清,没有一个解决我的问题,所以我不得不再问一次。 我有两个简单的课程, 另一类是 我在Windows cmd中的基本文件夹“ basic”中。我用编译 将创建一个文件夹和子文件夹。 这会产生大量错误。许多答案旨在指定无效的完整路径。我的班级在One中,因此使用-cp指定One也不起作用。 问题答案: 您将其运行为: …但是从 根 目录(), 不是