在docker compose中运行java

8xiog9wr  于 2021-06-25  发布在  Mysql
关注(0)|答案(2)|浏览(453)

这是my 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组成的compose,一个是mysql,一个是javacode,使用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

有人知道错误的原因吗?

g6baxovj

g6baxovj1#

问题是您正在指定 command 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
r7s23pms

r7s23pms2#

testcontainers库支持docker compose
引用官方文件
指向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);

在本例中,compose-test.yml应包含以下内容:

redis:   image: redis elasticsearch:   image: elasticsearch

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

相关问题