在docker compose中运行java

在docker compose中运行java,java,mysql,sql,docker,docker-compose,Java,Mysql,Sql,Docker,Docker Compose,这是我的docker compose file.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: M

这是我的docker compose file.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

有人知道错误的原因吗?

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

解决方案是将两个命令分组为一个命令

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"
查看更多信息

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

  volumes:
  - /home/crismon-01/Documenti/TESI/Docker/mysqlLogin:/usr/src/myapp 
  working_dir: /usr/src/myapp
  command: java -jar LogiIn.jar

Testcontainers库支持Docker Compose

引用官方文件

指向docker-compose.yml文件的单个类规则应足以启动测试所需的任意数量的服务:

在本例中,compose-test.yml应该具有 内容包括:

有关更多详细信息,请参阅官方文档

它说:启动容器进程导致“exec:\“cd\”:在$PATH中找不到可执行文件:就像它看不到容器中的文件夹一样filesystem@CristianMonti更新答案。尝试使用bash:
bash-c“cd/usr/src/myapp&&java-jar LogiIn.jar”
包装该命令。或者使用
working\u dir
属性。我有这个,可能是db?正在启动dbContainer。。。已完成重新创建mysqllogin\u java\u 1。。。已完成附加到dbContainer、mysqllogin\u java\u 1的操作。请使用--explicit\u defaults\u for\u timestamp server选项(有关更多详细信息,请参阅文档)。dbContainer | 2018-04-12T15:53:25.475417Z 0[错误]--指定了初始化,但数据目录中有文件。流产。dbContainer | 2018-04-12T15:53:25.475433Z 0[错误]中止dbContainer | dbContainer退出时代码为1 mysqllogin_java_1退出时代码为1>--已指定初始化,但数据目录中有文件。db抱怨数据目录不是空的。这是因为卷“/var/lib/mysql”已经存在。尝试清理文件夹:
/home/crismon-01/Documenti/TESI/Docker/mysqlLogin
,然后重试是的,现在它做了更多的事情,但它关闭了所有:dbContainer | 2018-04-12T16:06:57.332074Z 0[警告]InnoDB:创建了新的日志文件,LSN=45790 java|1 |错误:无法访问jarfile login.jar mysqlLogin|java|退出,代码1错误1396(HY000)在第1行:“根”@“%”的创建用户操作失败。这是我在shell的stacktrace中看到的错误
 @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); 
redis:   image: redis elasticsearch:   image: elasticsearch