質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.02%
Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

Dockerfile ENTRYPOINT ["entrypoint.sh"]のエラー

ryomannn
ryomannn

総合スコア15

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

1回答

0グッド

0クリップ

243閲覧

投稿2022/10/26 00:46

編集2022/10/26 00:55

環境

WSL2 ubuntu20.04.5LTS

発生している問題・エラーメッセージ

dockerでコンテナのフォルダをホストにマウントして、ホスト上でマウントしたフォルダの内容に変更を加えようとするとパミッションエラーが出たので
ホスト上のユーザーのuidとgidをコンテナ上のユーザーのuidとgidと合わせようと思いDockerfileを編集したところ

docker compose up -d でapi_containerが立ち上がらなくなりました。

docker-compose.yml

version: '3.9' services: web: image: nginx:1.23-alpine container_name: web_contianer env_file: - web.env ports: - "8000:8080" volumes: - public-data:/app/public - tmp-data:/myapp/public - ./config/nginx:/etc/nginx/conf.d depends_on: frontend: condition: service_healthy api: condition: service_healthy db: image: mysql:8.0 container_name: db_contianer env_file: - db.env ports: - "3306:3306" volumes: - db-data:/var/lib/mysql - ./config/mysql:/etc/mysql healthcheck: test: ["CMD", "pwd"] interval: 1s timeout: 1s retries: 3 start_period: 1s frontend: build: context: ./frontend dockerfile: Dockerfile target: ${BUILD_MODE} container_name: front_contianer env_file: - ./frontend/front.env ports: - "3000:3000" volumes: - public-data:/app/build healthcheck: test: ["CMD", "pwd"] interval: 1s timeout: 1s retries: 3 start_period: 1s tty: true stdin_open: true api: build: context: ./backend dockerfile: Dockerfile container_name: api_contianer env_file: - ./backend/api.env ports: - "4000:4000" volumes: - tmp-data:/app/tmp - log-data:/app/log - ./backend:/app depends_on: db: condition: service_healthy healthcheck: test: ["CMD", "pwd"] interval: 1s timeout: 1s retries: 3 start_period: 1s tty: true stdin_open: true volumes: db-data: driver: local public-data: tmp-data: log-data:

Dockerfile(api_container用)

FROM ruby:3.1.2-slim AS dev ARG USER_NAME WORKDIR /app COPY Gemfile Gemfile.lock . RUN apt-get -y update &&\ apt-get -y install \ default-mysql-client \ default-libmysqlclient-dev \ gcc \ libc-dev \ make \ ruby-dev RUN bundle install COPY . . COPY entrypoint.sh /usr/bin/ RUN chmod +x /usr/bin/entrypoint.sh ENTRYPOINT ["entrypoint.sh"] EXPOSE 4000

entrypoint.sh

**#!/bin/bash** set -e useradd -u ${USER_ID} -m ${USER_NAME} groupmod -g ${GROUP_ID} ${GROUP_NAME} export HOME=/home/${USER_NAME} rm -f /app/tmp/pids/server.pid exec "$@"

いろいろ調査したところapi_containerのDockerfileの

ENTRYPOINT ["entrypoint.sh"]

の記述がなければ正常に動きます。

またentrypoint.shのファイルの内容は正常であり、entrypoint.shファイルの内容を何も記述しなくてもコンテナが起動しません。
一度起動したコンテナを削除せずにもう一度docker compose upコマンドを実行すると
user already exist となり、api_containerが起動できなくなるので

entrypoint.shのuseraddなどのコマンドは実行されています。(環境変数も問題なく渡せています。)
log

イメージ説明

docker compose upに出てくるログは

api_containerについては

container for service "api" is unhealthy api_contianer exited with code 0

のみでありここから先がデバッグできない状態です。

ご教授お願い致します。

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

bsdfan

2022/10/26 04:09

entrypoint.sh の最後が exec "$@" なので、Dockerfile の CMD か、docker-compose.yml の command かで、コンテナで実行したいコマンドを渡してやらないといけないのでは?
ryomannn

2022/10/26 04:17

コメントありがとうございます。 ためしに entorypoint.shの内容を ``` #!/bin/bash useradd -u ${USER_ID} -m ${USER_NAME} groupmod -g ${GROUP_ID} ${GROUP_NAME} export HOME=/home/${USER_NAME} ``` としてもapi_container は立ち上がりません。 後この部分に関しては、docker公式のrailsのクイックスタートの一部を参考にしています。 https://matsuand.github.io/docs.docker.jp.onthefly/samples/rails/ なのでここが原因ではなさそうです。

回答1

0

自己解決

command: tail -f /dev/null

を追加してあげると起動するようになりました。

tty: true stdin_open: true

起動時にshellスクリプトを実行するときはこれらの設定だけだとだめなのが紛らわしい。

投稿2022/10/26 11:31

ryomannn

総合スコア15

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.02%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです