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

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

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

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Docker

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

Q&A

3回答

18215閲覧

docker run をした時点でapache2を起動状態にする方法はありますか?

wataru1127

総合スコア13

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Docker

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

0グッド

2クリップ

投稿2018/02/01 17:36

docker run でapache2を起動させたいのですがつまずいています

ディレクトリ構成

$ tree . . ├── Dockerfile └── html ├── index.php

index.php

<?php phpinfo(); ?>

ubuntu:16.04をベースにしてphpとapache2をインストールします。

Dockerfile

FROM ubuntu:16.04 MAINTAINER *** <**@**.**> RUN apt-get update && apt-get upgrade -y && \ apt-get install apache2 -y RUN apt-get install php libapache2-mod-php -y COPY ./html /var/www/html EXPOSE 80 CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"]

[ターミナルでbuild]

$ docker build -t test/apache2 .

イメージは作成成功。

###質問1
[ターミナルでコンテナ起動]

$ docker run -itd -p 8080:80 -v /home/***/dir/html:/var/www/html test/apache2

...起動するもすぐ終了。

[ターミナルでコンテナ起動]

$ docker run -itd -p 8080:80 -v /home/***/dir/html:/var/www/html test/apache2 /bin/bash

これなら起動状態が継続します。
この、/bin/bashをつけるとつけない場合の挙動の差はなんでしょうか?

###質問2(本題)

docker run をした時点でapacheを起動状態にする方法はありますか?

Dockerfileに

CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"]

を記述すればdocker runのときにapacheが起動する、というようなことをブログ記事などでみるのですが、起動しません。

また、

$ docker run -itd -p 8080:80 -v /home/***/dir/html:/var/www/html test/apache2 /usr/sbin/apache2 -DFOREGROUND

という記事もみましたが、これも起動しません。

今のところ、
コンテナが起動継続したコマンド↓

$ docker run -itd -p 8080:80 -v /home/***/dir/html:/var/www/html test/apache2 /bin/bash

のあと、

$ docker exec -it test/apavhe2 /bin/bash

でコンテナの中に入り、

# service apache2 start

としたら初めてブラウザからindex.phpを見ることができました。

php:7.0-apacheというイメージをdocker Hubから落としてきて使うというのは試してみて実際うまくいくのですが、今までXAMPPなど既成のソフトを使ってきてapacheとphpのつながりとかほぼ意識せずにいたので仕組みを知りたく、ご教授お願いします。

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

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

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

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

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

guest

回答3

0

このサイトが参考になりそうです。

時間あいていますが、どなたかの役に立てれば。
Dockerfileに以下を追記する。

ENV APACHE_RUN_USER www-data ENV APACHE_RUN_GROUP www-data ENV APACHE_PID_FILE /var/run/apache2.pid ENV APACHE_RUN_DIR /var/run/apache2 ENV APACHE_LOG_DIR /var/log/apache2 ENV APACHE_LOCK_DIR /var/lock/apache2 CMD ["apachectl", "-D", "FOREGROUND"]

投稿2019/07/06 19:21

編集2019/07/06 19:27
AIUeno

総合スコア15

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

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

s__k

2021/05/04 07:34

質問者様とは別の者ですが同じ問題で詰まっていたところ見事解決しました。 ありがとうございます。
guest

0

docker run時にCMDは最後の1つのみ実行される性質に依るものかと思います。

※当方の環境がcentOS7のためubuntuでは検証していません(適宜読み替えてください)。

dockerfile最終のCMD
CMD ["/usr/sbin/httpd", "-DFOREGROUND"]

起動コマンド
docker run -itd --name コンテナ名 -p 80:80 イメージ名

コンテナ内へ進入
docker exec -it コンテナ名 /bin/bash

runの最後に/bin/bash等、起動直後のコマンドを指定すると、
それが最後のCMDと解釈され、dockerfile中のCMDが効きません。

CMDを複数記述したい場合は下記URLのように.shを作り実行するのが良いようです。
https://sleepless-se.net/2018/05/26/docker%E3%81%A7%E8%A4%87%E6%95%B0cmd%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/

投稿2019/02/18 06:10

ob_null

総合スコア16

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

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

0

Dockerfile でサービスを有効にしてください

たとえばCENTOS6のmysqldをサービス起動設定するときは

RUN chkconfig mysqld on #cmdだったかもかも

追記 DOCKER + CENTOS 7 でのサービスの場合

  • Dockerfile
FROM centos # RUN RUN yum -y update RUN yum -y upgrade RUN yum -y install httpd php mysql RUN systemctl enable httpd

起動コマンド

# docker stop httpd # docker rm httpd docker build -t httpd . docker run --name httpd --privileged -d httpd /sbin/init docker exec -it httpd /bin/bash

ps コマンド

[root@a8441e73e05f /]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.8 0.0 43032 3256 ? Ss 15:37 0:00 /sbin/init root 15 0.0 0.0 11772 1824 ? Ss 15:37 0:00 /bin/bash root 31 1.0 0.1 36832 6996 ? Ss 15:37 0:00 /usr/lib/systemd/systemd-journald root 38 1.4 0.0 41548 1844 ? Ss 15:37 0:00 /usr/lib/systemd/systemd-udevd root 45 0.0 0.0 41412 1372 ? S 15:37 0:00 /usr/lib/systemd/systemd-udevd root 46 0.0 0.0 42540 2712 ? S 15:37 0:00 /usr/lib/systemd/systemd-udevd root 47 0.0 0.0 41412 1576 ? S 15:37 0:00 /usr/lib/systemd/systemd-udevd root 48 0.0 0.0 41412 1440 ? S 15:37 0:00 /usr/lib/systemd/systemd-udevd root 49 0.0 0.0 41412 1432 ? S 15:37 0:00 /usr/lib/systemd/systemd-udevd root 50 0.0 0.0 41412 1244 ? S 15:37 0:00 /usr/lib/systemd/systemd-udevd root 51 0.0 0.0 41412 1396 ? S 15:37 0:00 /usr/lib/systemd/systemd-udevd root 52 0.0 0.0 41412 1340 ? S 15:37 0:00 /usr/lib/systemd/systemd-udevd root 53 0.0 0.0 41544 1360 ? S 15:37 0:00 /usr/lib/systemd/systemd-udevd root 54 0.0 0.0 41544 1368 ? S 15:37 0:00 /usr/lib/systemd/systemd-udevd root 56 1.2 0.2 308328 11872 ? Ss 15:37 0:00 /usr/sbin/httpd -DFOREGROUND root 57 0.0 0.0 22080 1432 ? Ss 15:37 0:00 /usr/lib/systemd/systemd-logind dbus 58 0.0 0.0 24284 1448 ? Ss 15:37 0:00 /bin/dbus-daemon --system --address=systemd root 61 0.0 0.0 9860 824 tty1 Ss+ 15:37 0:00 /sbin/agetty --noclear tty1 linux apache 72 0.0 0.1 308328 6116 ? S 15:37 0:00 /usr/sbin/httpd -DFOREGROUND apache 73 0.0 0.1 308328 6116 ? S 15:37 0:00 /usr/sbin/httpd -DFOREGROUND apache 74 0.0 0.1 308328 6116 ? S 15:37 0:00 /usr/sbin/httpd -DFOREGROUND apache 75 0.0 0.1 308328 6116 ? S 15:37 0:00 /usr/sbin/httpd -DFOREGROUND apache 76 0.0 0.1 308328 6116 ? S 15:37 0:00 /usr/sbin/httpd -DFOREGROUND root 79 0.0 0.0 47448 1656 ? R+ 15:37 0:00 ps aux

ubuntus の場合何か方法が違うのかな?

投稿2018/02/01 23:50

編集2018/02/02 15:38
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

wataru1127

2018/02/02 09:04

Dockerfileに、 ``` RUN service apache2 start ``` を追加してみました。 ビルド中にエラーが出て、イメージ自体は作成されますが、結果は変わりませんでした。 RUNはやめて、 ``` CMD ["/usr/sbin/apache2", "service", "start"] ``` はどうかなと試してみましたが、上手くいきませんでした。 残念です。
退会済みユーザー

退会済みユーザー

2018/02/02 12:24

start じゃなく 自動起動を有効化(onかenableだと思う)する
wataru1127

2018/02/02 13:18

Dockerfile に ``` RUN systemctl enable apache2 ``` → ダメでした。 ``` CMD ["/usr/sbin/apache2", "systemctl", "enable"] ``` → ダメでした。
wataru1127

2018/02/02 16:27

ubuntuでパッケージ検索をすると、 $ apt-cache search httpd httpdというパッケージがないみたいです。 httpdはcentOS用なんでしょうかね。
退会済みユーザー

退会済みユーザー

2018/02/02 16:40

apache2 かもしれないよ ubunt は
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問