makoxti
@makoxti

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

springbootアプリケーションをdocker-composeで動かしたい

Q&A

Closed

解決したいこと

以下の技術でできているjavaプロジェクトをDockerで動かせるようにしたいです。

  • java
  • postgresSQL

以下の記事を参考に実施してみたのですが、起動時にエラーが出てしまいます。
https://qiita.com/ferretdayo/items/a91d603e3d80a459645b
https://zenn.dev/junki555/articles/de2c9844a1d101

githubのrepositoryは以下になります。
https://github.com/makoxty/docker_java

発生している問題・エラー

docker-compose up時に出力されるエラーです。

Removing app
db is up-to-date
adminer is up-to-date
Recreating f7eea8554bb3_app ... error

ERROR: for f7eea8554bb3_app  Cannot start service app: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "./pictgram/mvnw": permission denied: unknown

ERROR: for app  Cannot start service app: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "./pictgram/mvnw": permission denied: unknown
ERROR: Encountered errors while bringing up the project.

該当するソースコード

docker-compose.yml
version: '3.6'
services:
  app:
    image: openjdk:15
    container_name: app
    restart: always
    ports:
      - 8080:8080
    volumes:
      - .:/app
    working_dir: /app
    command: ./pictgram/mvnw spring-boot:run
    depends_on:
      - db

  adminer:
    image: adminer:4.7.8
    container_name: adminer
    ports:
      - "9000:8080"
    depends_on:
      - db

  db:
    image: postgres:13.1
    container_name: db
    environment:
      POSTGRES_USER: "root"
      POSTGRES_PASSWORD: "root"
      POSTGRES_DB: "dev"
    ports:
      - "5432:5432"
    volumes:
      - dbvol:/var/lib/postgresql/data
      - ./forDocker/db/initdb:/docker-entrypoint-initdb.d

volumes:
  dbvol:

よろしくお願いします。

0

1Answer

Java の知見が無いのですが、次の(a)(b)の 2つの案が思い付きます.

(a) ホスト側で「chmod 777 ./pictgram/mvnw」をする.
その後、docker-compose up -d を実施してみる

(b) docker-compose.yml の「command: ./pictgram/mvnw spring-boot:run」を
次のように変えてみる

command: >
  bash -c 'chmod +x ./pictgram/mvnw && ./pictgram/mvnw spring-boot:run'
0Like

Comments

  1. その他切り分けとしては、次の (1)〜(3) でコンテナ内を調査する、でしょうか.

    (1) docker-compose.yml より、「command: ./pictgram/mvnw spring-boot:run」を「command: sleep 360000」に変更する
    (2) docker-compose up -d
    (3) 「docker-compose exec app bash」で service「app」にログインし、mvnw の実行権限をチェックしてみる. (ディレクトリ pictgram/ にアクセス可能かも含めて)
  2. @makoxti

    Questioner

    ありがとうございます。
    権限を変えたところ、エラー内容が変わりました。
    docker-compose upで起動すると以下のエラーがコンソールに出力されるようになりました。

    ```
    app | Error: Could not find or load main class org.apache.maven.wrapper.MavenWrapperMain
    app | Caused by: java.lang.ClassNotFoundException: org.apache.maven.wrapper.MavenWrapperMain
    app exited with code 1
  3. @makoxti

    Questioner

    ありがとうございます。

Your answer might help someone💌