簡體   English   中英

在 docker-compose 中運行 java

[英]run java in 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:
     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,一個使用使用 db 的 javacode,現在我需要運行它,但出現此錯誤:

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"

查看使用 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

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/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM