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

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

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

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

Docker

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

Q&A

解決済

1回答

3293閲覧

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

odechimaru

総合スコア12

docker-compose

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

Docker

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

0グッド

0クリップ

投稿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

1version: '3' 2 3services: 4 db-master: 5 db-slave: 6 wiremock: 7 8 web: 9 platform: linux/x86_64 10 container_name: webapp 11 hostname: web-server 12 build: ./web 13 ports: 14 - "80:80" 15 volumes: 16 - "./web/app:/app:z" 17 - "./web/test:/test:z" 18 - "./web/cmd.sh:/cmd.sh:z" 19 links: 20 - db-master 21 - db-slave 22 - wiremock 23 depends_on: 24 - db-master 25 - db-slave 26 - wiremock 27 # restart: always 28 networks: 29 - default 30 31networks: 32 default: 33

Dockerfile

1FROM centos 2 3WORKDIR /app 4COPY app /app 5COPY test /test 6COPY opt/projectr /opt/projectr 7COPY cmd.sh / 8COPY httpd.conf /etc/httpd/conf.d/httpd.conf 9 10RUN find /opt/projectr/ \( -name '*.jpg' -o -name '*.png' \) | xargs touch -d "2018/10/01 01:00:00" 11 12RUN mkdir /var/log/pjt && \ 13 chmod 777 /var/log/pjt 14 15CMD ["/cmd.sh"]

cmd.sh

sh

1#!/bin/bash 2set -e 3 4if [ "$env" = "test" ]; then 5 echo "Running Unit Tests" 6 exec phpunit --colors=always --verbose --test-suffix=Test.php --configuration "/test/phpunit.xml" "/test/" 7else 8 echo "Running Web Server" 9 touch /usr/sbin/apachectl 10 chmod 777 /usr/sbin/apachectl 11 exec /usr/sbin/apachectl -D FOREGROUND 12fi

試したこと

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

Dockerfile

1FROM centos 2 3WORKDIR /app 4COPY app /app 5COPY test /test 6COPY opt/projectr /opt/projectr 7COPY cmd.sh / 8COPY httpd.conf /etc/httpd/conf.d/httpd.conf 9 10RUN find /opt/projectr/ \( -name '*.jpg' -o -name '*.png' \) | xargs touch -d "2018/10/01 01:00:00" 11 12RUN mkdir /var/log/pjt && \ 13 chmod 777 /var/log/pjt 14 15RUN touch /usr/sbin/apachectl 16RUN chmod 777 /usr/sbin/apachectl 17 18CMD ["/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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

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状態にすることができました! 親切丁寧にご教授とご協力していただき大変ありがとうございました。
guest

回答1

0

自己解決

結論

apacheは入っていたが、cmd.shのapacheを起動するパスが間違っていたために処理が終了していた。

解決に至った方法

i)

docker login

でdockerにログインする。

ii)

docker-compose build

でサービスのビルドを実行する。
ymlファイルのイメージ名がローカルになければ、リモートからプルしてくる。
imageが書かれていない場合、buildに書かれているパスの(デフォルトは)Dockerfileを参考にしてイメージを構築します。

iii)

docker run -it --rm イメージ名 /bin/bash

でコンテナの中に入る。

iv)

which apachectl

でapacheの場所を確認する。

v)
cmd.shのapachectlを記述してるところのパスをiv)で確認したパスに変更し、下記のコマンドの実行でコンテナを作成することでRUNNING状態になりました。

docker-compose up -d

投稿2022/07/25 00:03

odechimaru

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問