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

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

新規登録して質問してみよう
ただいま回答率
87.20%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Docker

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

解決済

Dockerコンテナの作成はできるのですが、STATUSがExited(1)になってしまい起動できない。

odechimaru
odechimaru

総合スコア12

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Docker

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

1回答

0リアクション

0クリップ

378閲覧

投稿2022/07/23 14:58

前提

当方、Docker初心者のため至らないところがありましたら申し訳ございません。

レガシーシステムをローカルでデバッグする必要があり、環境構築しようとしております。

以前サーバーがダウンしてた際に、プライベートレジストリが復旧していなかったため現状環境構築ができないことが判明いたしました。

昔からいらっしゃった方もプライベートレジストリに何があったのかわからないようで、こちらの方で修正を任されることになりました。

プライベートレジストリでは、イメージを置いていただけだと思うので、こちらでイメージを用意してあげればうまくいくと思っていた次第です。

しかし、ビルドがうまくいかないので有識者の方にご教授いただけたら幸いです。

また、初めての質問でテンプレート通りで申し訳ございません。

・M1 Macを使用しております。
・名前を変更しているところがあります。
・DockerfileのFromのところをプライベートレジストリにしておりました。
・情報が足りない場合は補足いたします。

実現したいこと

コンテナの作成まではできていますので、STATUSをRunning状態にしたい。

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

コンテナのSTATUSがExited(1)になってしまう。
(restart: alwaysのコメントアウトを外しますとコンテナが無限に再起動いたします。)

docker logではechoした"Running Web Server"とSuccessが出るが他に出てこないので手詰まりです…

apacheが起動していないのかなと思っております、、

該当のソースコード

docker-compose.yml
※db-master,db-slave,wiremockは正常に動いているため、割愛しております。

yml

version: '3' services: db-master: db-slave: wiremock: web: platform: linux/x86_64 container_name: webapp hostname: web-server build: ./web ports: - "80:80" volumes: - "./web/app:/app:z" - "./web/test:/test:z" - "./web/cmd.sh:/cmd.sh:z" links: - db-master - db-slave - wiremock depends_on: - db-master - db-slave - wiremock # restart: always networks: - default networks: default:

Dockerfile

FROM centos WORKDIR /app COPY app /app COPY test /test COPY opt/projectr /opt/projectr COPY cmd.sh / COPY httpd.conf /etc/httpd/conf.d/httpd.conf RUN find /opt/projectr/ \( -name '*.jpg' -o -name '*.png' \) | xargs touch -d "2018/10/01 01:00:00" RUN mkdir /var/log/pjt && \ chmod 777 /var/log/pjt CMD ["/cmd.sh"]

cmd.sh

sh

#!/bin/bash set -e if [ "$env" = "test" ]; then echo "Running Unit Tests" exec phpunit --colors=always --verbose --test-suffix=Test.php --configuration "/test/phpunit.xml" "/test/" else echo "Running Web Server" touch /usr/sbin/apachectl chmod 777 /usr/sbin/apachectl exec /usr/sbin/apachectl -D FOREGROUND fi

試したこと

cmd.shで行っていたことをDockerfile内で行う

Dockerfile

FROM centos WORKDIR /app COPY app /app COPY test /test COPY opt/projectr /opt/projectr COPY cmd.sh / COPY httpd.conf /etc/httpd/conf.d/httpd.conf RUN find /opt/projectr/ \( -name '*.jpg' -o -name '*.png' \) | xargs touch -d "2018/10/01 01:00:00" RUN mkdir /var/log/pjt && \ chmod 777 /var/log/pjt RUN touch /usr/sbin/apachectl RUN chmod 777 /usr/sbin/apachectl CMD ["/usr/sbin/apachectl", "-D", "FOREGROUND"]

結果:exec /usr/sbin/apachectl: exec format error
だめでした、、
docker-compose.ymlの環境が違うのかな?
(linux/x86_64のところです。amdやarmでもだめっぽい)

補足情報(FW/ツールのバージョンなど)

環境
M1 Macbook Pro
VScode

以下のような質問にはリアクションをつけましょう

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

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

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

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

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

East_san

2022/07/23 23:39

1つ1つ確認していきましょう。 以下の結果を提供することは可能ですか? docker ps -a これでどのコンテナが起動していなくてどのコンテナが起動しているかがわかります
odechimaru

2022/07/24 01:37

ありがとうございます! 承知いたしました。下記が実行した結果になっております。 ``` CONTAINER ID IMAGE COMMAND STATUS PORTS NAMES 588540b3bc8a project-web-appweb_web "/cmd.sh" Exited (1) -- webapp e7c590c44a75 mariadb:10.5 "docker-entrypoint.s…" UP 0.0.0.0:13306->3306/tcp db-slave c88be3b4f305 mariadb:10.5 "docker-entrypoint.s…" Up 0.0.0.0:3306->3306/tcp db-master 4a01f3be2971 project-web-appweb_wiremock "/docker-entrypoint.…" Up 8443/tcp, 0.0.0.0:18080->8080/tcp wiremock ```
East_san

2022/07/24 01:49

docker start 588540b3bc8a これでstatusがupになりませんか?
odechimaru

2022/07/24 03:58

Exited(1)で変わらないですね… 処理が走って、そのまま終わってしまっている感じですかね?
hoshi-takanori

2022/07/24 04:23

exec /usr/sbin/apachectl: exec format error なので、apache が正常に入ってないのでは。というか、Dockerfile に apache を入れてる形跡が見当たりません (むりやり touch しても空ファイルが出来るだけで意味ないです) が、centos イメージにもともと入ってるのでしょうか?
East_san

2022/07/24 04:34

docker logs 588540b3bc8a でログを見ることは可能ですか?
odechimaru

2022/07/24 06:44

hoshi-takanoriさん apache入っていないみたいですね。 FROM centosをFROM httpd:2.4に変更しapacheを使えるものに変更するだけでは足りないですかね? RUN yum install httpdも入れて試してみましたができないです…
odechimaru

2022/07/24 06:46

East_sanさん ``` Running Web Server /cmd.sh: line 13: /usr/sbin/apachectl: Success ``` と表示されます。
East_san

2022/07/24 08:24

見た感じ普通にできてるっぽですね。 ログからDockerfileは前者のCMD ["/cmd.sh"]の方を実行している認識で良いですか?
odechimaru

2022/07/24 08:50

そちらの認識であってます! 私もSuccessになっているのでできていると思ったのですが、Running状態にならず処理が終わってしまっているのはなぜなのでしょう… apacheが起動状態になっていないか、そもそもapacheが入っていないのか🤔 フォアグラウンドが原因なんてことも…?
East_san

2022/07/24 09:04

一度単体で実行してみてはどうでしょうか? docker run -it --rm project-web-appweb_web
odechimaru

2022/07/24 12:09

遅くなってしまい申し訳ございません。 ``` WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested Running Web Server /cmd.sh: line 13: /usr/sbin/apachectl: Success ``` このように表示されました!警告が表示されましたがこれが原因でしょうかね? ちなみに実行結果はこれ以外は変化なしです。
East_san

2022/07/24 12:50

この場合はapacheはフォアグラウンドで動いたままですか?それともすぐに終了しますか?
odechimaru

2022/07/24 13:03

docker run -it --rm project-web-appweb_webの--rmを抜いて実行したところ、 やはりすぐに終了しています!
odechimaru

2022/07/24 13:14

ちなみになのですが、 docker run --platform linux/amd64 -it rproject-web-appweb_g3_web で実行したところ、先ほどのWARNINGは消えましたがやはりすぐに終了してしまいます🥲
East_san

2022/07/24 13:15

docker run -it --rm project-web-appweb_web /bin/bash もしくは docker run -it --rm project-web-appweb_web bash でコンテナの中に入った後 /usr/sbin/apachectl -D FOREGROUND とコマンドを打つとどうなりますか?
odechimaru

2022/07/24 13:38

前者と後者どちらでもで試して入れましたが、最後のコマンドを入力しましたら下記のようになりました。 ``` bash: /usr/sbin/apachectl: No such file or directory ```
East_san

2022/07/24 13:50 編集

もしかしたらapacheが入ってないのかもしれないですね。 先程と同様コンテナに入った後に以下のコマンドはどうでしょうか? httpd -DFOREGROUND また、whereis apachectl または which apachectlでパスが表示されたりしますか?
odechimaru

2022/07/24 14:01

httpd -DFOREGROUNDは ``` AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message [Sun Jul 24 13:56:14.765348 2022] [mpm_event:notice] [pid 99:tid 274907412352] AH00489: Apache/2.4.54 (Unix) configured -- resuming normal operations [Sun Jul 24 13:56:14.769669 2022] [core:notice] [pid 99:tid 274907412352] AH00094: Command line: 'httpd -D FOREGROUND' ``` という風に表示されます。 control+Cを入力すると ``` [Sun Jul 24 13:59:42.461600 2022] [mpm_event:notice] [pid 8:tid 274907412352] AH00491: caught SIGTERM, shutting down ``` となります。 また、whereis apachectl(またはwhich apachectl)は ``` apachectl: /usr/local/apache2/bin/apachectl ``` でパスが表示されます。
East_san

2022/07/24 22:46 編集

control+Cで中断ということはフォアグラウンドで起動しているみたいですね。 apachectlの場所がわかったので、コンテナに入った後、以下のコマンドでできるのではないでしょうか? /usr/local/apache2/bin/apachectl -D FOREGROUND
odechimaru

2022/07/25 00:03

無事にRUNNING状態にすることができました! 親切丁寧にご教授とご協力していただき大変ありがとうございました。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Docker

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