Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
@derasado
Revisions
Report this question
Subscribe question
Help us understand the problem. What is going on with this question?
Q&A

Dokerを使用しているがApacheでlocalhost?に繋がらない。

解決したいこと

初心者ですので、分かりづらい点あれば申し訳ございません。

・ブラウザに表示されない問題を解消したいです。
※localhostに繋げたい。

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

出ているエラーメッセージを入力

このサイトにアクセスできません。
※下記画像あり。

例)

このサイトにアクセスできません。
localhostで接続が拒否されました。

68325.jpg

該当するソースコード

ソースコード

例)

//dokcer-compose.ymlの中身

version: "3"

services:
  app:
    build:
      context: .
      dockerfile: docker/app/Dockerfile
    ports:
      - "50080:80"
    volumes:
      - ./src:/var/www/html
    depends_on:
      - db

  db:
    image: mysql:5.5.62
    ports:
      - "53306:3306"
    volumes:
      - ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf
      - ./docker/db/mysql_data:/var/lib/mysql
    env_file:
      - ./docker/db/db-variables.env


//Dockfileの中身
# Heroku のデプロイ時に使用する Dockerfile

FROM php:7.4-apache

WORKDIR /var/www/html

# PHP で必要なライブラリをインストール
RUN apt-get update \
    && apt-get install -y libonig-dev libzip-dev unzip mariadb-client \
    && docker-php-ext-install pdo_mysql mysqli mbstring zip

# composer のインストール
COPY --from=composer:1.10 /usr/bin/composer /usr/bin/composer
ENV COMPOSER_ALLOW_SUPERUSER 1

# ファイルのコピー
COPY ./src /var/www/html
COPY ./docker/app/php.ini /usr/local/etc/php/php.ini

# Heroku で Apache2 が設定エラーになることへの対応
# https://github.com/docker-library/wordpress/issues/293
COPY ./docker/app/run-apache2.sh /usr/local/bin/
CMD [ "run-apache2.sh" ]

自分で試したこと

ここに問題・エラーに対して試したことを記載してください。

1.docker-compose.ymlでappのportsは50080:80になっているか
2. docker/app/Dockerfileでsrcディレクトリを/var/www/htmlにコピーしているか
3. Dockerfileでsrcディレクトリを/var/www/htmlにコピーしているか
4. Dockerのappというコンテナに入り、new.phpは「/var/www/html/companies/new.php」にあるか。
※new.phpは表示させたいファイルです。
68326.jpg

5. appコンテナ内でApacheが起動しているか確認。
68332.jpg
6. 念の為Apacheを再起動
7. appコンテナとdbコンテナが起動していることを確認
68333.jpg

8. appコンテナのログを確認
68330.jpg

9. ここまでで下記は判明しております。
・Apacheは問題なく起動している
・(ログから)Apacheに通信が届いていない

10. src直下にファイル(src/index.php)を作成し、簡単な処理を実行。

<?php
echo 'hello';

10-1. コマンドでこちらは実行できることを確認済み
docker-compose exec app php index.php

10-2. Apache経由から実行できることを確認するが、ブラウザで次のURLにアクセスするが、「このサイトにアクセスできません」と表示される。
http://localhost:50080/index.php
http://127.0.0.0:50080/index.php

このような状況です。
長くなり申し訳ございませんが、大変困っております。
どうか助言頂けますと幸いです。
何か必要な情報があればお伝え致します。

いくつか画像で情報をアップ致しますのでご確認頂けますと幸いです。

★階層
68366.jpg
★docker-compose.ymlの中身![68328.jpg]
68329.jpg
★Dockerfileの中身
68328.jpg
★docker/app/Dockerfileの中身![68452.jpg]
68327.jpg
★ローカルPCのhostsの設定?
68452.jpg

下記情報の追記になります。
・使用しているOSの情報:Windows10
・使用しているDockerのバージョン:v20.10.2
・使用しているDocker Composeのバージョン: 1.27.4,
・最後の「ローカルPCのhostsの設定?」で示しているファイルのフルパス
C:/Windows/System32/drivers/etc/hosts

★講座を進めている講師いわく
原因はApacheの設定かホストかポート、もしくはファイルパスのいずれかにあるはずなので、そこを一つずつ検証するのが遠回りなようで近道かと思いますとのことです。

0
6
Answer

勘でいくつか思いついたのでコメントします。

  • hostsでlocalhostの部分コメントアウトされてませんか?
  • dockfileの「ファイルのコピー」次行。docker-composedeで共有してますし不要では?
  • バーチャルホストの設定で変更をかけていませんか?
0
harmlessさん
ご回答いただきましてありがとうございます。


・hostsでlocalhostの部分コメントアウトされてませんか?→こちらはhostsのメモ帳で#localhostの部分を削除すればよろしいでしょうか?

・すみません、初心者なものでバーチャルホストの設定とは?どこで確認できますでしょうか?

お手数ですがよろしくお願い致します。
hostsの部分は「127.0.0.1 localhost」の一行を追加したら良いと思います。
バーチャルホストは触っていないのであればそのままで。

上の対応でいったん試したうえで、
もしまだ駄目であれば、
* dockfile「ファイルのコピー」次行削除
* docker-composeファイルのvolumes項目削除
し、「./src」と「/var/www/html」の連携を一度切ってみた方が良いかもです。
ありがとうございます。
試してみましたが、ダメでした・・・
もし可能であれば、「Dockfile」と「docker-compose.yml」をコードで貼り付けてもらえませんか?
コード貼り付け致しました。
「Dockfile」に関しては、docker/app/Dockerfileもありますが、
「Dokcerfile」の方でよろしかったでしょうか?
ご確認よろしくお願い致します。

※コードは元の状態に戻してます。

View the remaining 4 comments.

dockfileの「ファイルのコピー」次行。docker-composedeで共有してますし不要では?

また、上記ですがdockrfileの「ファイルのコピー」次行削除してみるといいのでしょうか?

0

Windows+WSL2+Dockerな環境ではないかと勝手に思っておりますが localhostForwarding の設定がされていないとかではないでしょうか。
参考になりそうな記事へのURLを貼っておきます。

https://qiita.com/snaka/items/a8eee4cfc8f7d733e6ab
https://qiita.com/v2okimochi/items/f53edcf79a4b71f519b1

とりあえず、何が問題なのか切り分けるために、今現在作業されているdocker-compose.ymlやDockerfileは全部なかったことにして、シンプルで余計な要素のないDockerfileでコンテナを作成して、親側(Windows)から子(Docker)に接続できるかどうかを確認されてはいかがでしょう。

0
rshibasa様
ご回答いただきましてありがとうございます。

仰る通り、Windows+WSL2+Dockerな環境でございます。
localhostForwardingは初耳です。

下記試してみたのですが、Windows 側から http://localhost:8080 でアクセスして成功はしました。
https://qiita.com/snaka/items/a8eee4cfc8f7d733e6ab

そちらも行いたいのですが、どのような手順で行えばよいのでしょうか?
大変申し訳ございませんが、独学エンジニアという講座を受講しておりまして、それに沿ってやっていたので、環境についてはそこまで深くあまり理解していないのが現状です。

自分の環境で動きましたのでお知らせです。

先述の箇所のコメントアウトしただけなので、
もしかしたら既存のコンテナor大本のdockerが原因かもです。。。
一回docker rmi コンテナした方が良いかもです。

一応貼っておきますね。

docker-compose.yml
version: "3"

services:
  app:
    build:
      context: .
      dockerfile: ./Dockerfile
    volumes:
      - ./src:/var/www/html
    ports:
      - "50080:80"

mysql記述は検証に不要のため削除。
dockerfileの置き場所を一応相対指定に変更。

FROM php:7.4-apache

WORKDIR /var/www/html

# PHP で必要なライブラリをインストール
RUN apt-get update \
    && apt-get install -y libonig-dev libzip-dev unzip mariadb-client \
    && docker-php-ext-install pdo_mysql mysqli mbstring zip

# composer のインストール
COPY --from=composer:1.10 /usr/bin/composer /usr/bin/composer
ENV COMPOSER_ALLOW_SUPERUSER 1

# ファイルのコピー
# COPY ./src /var/www/html
# COPY ./docker/app/php.ini /usr/local/etc/php/php.ini

heroku設定は検証に不要なため削除。
ファイルのコピーは
/var/www/htmlはdocker-compose.ymlで書いているため不要、
php.iniは記述が不明なため一旦コメントアウト。

0
ご確認いただきましてありがとうございます。
一回docker rmi コンテナした方が良いかもです
→すみません、具体的にどのようにしたらよろしいでしょうか?
理解できてなくてすみません、、、

VScodeから上記のように変更したらいいのでしょうか?
はい。各ファイルを上記のように変更のうえ、
コマンドで
「docker-compose build」
「docker-compose up -d」
してみてください。

もしそれで駄目だった場合は一度コンテナを削除してみてください。
さっき「docker rmi」と書きましたが、
新しめのdocker-for-windowsなら、タスクのアイコン右クリックでダッシュボードが開けます。そこの「images」を選択し、自身が作成したイメージを削除してみてください。

※コマンドでgoogle検索するなら「docker rmi image」とか。
実行したところダメでしたので、コンテナとイメージを削除致しました!

こちら、ある方に相談しまして解決致しました!

結論ポート番号が原因でした・・・
50080→8080に変えたところ成功しました。

何かPCに入っているアンチウィルスソフトとか、そういった類のソフトで何かポートが制限されているかもしれないそうです。

もしくは、DYNAMIC AND/OR PRIVATE PORTS
49152番~65535番が使えないかもしれないとの予想でした。

なにかわかる方がいればよろしくお願い致します。
View the remaining 3 comments.

追記ですが

★講座を進めている講師いわく
原因はApacheの設定かホストかポート、もしくはファイルパスのいずれかにあるはずなので、そこを一つずつ検証するのが遠回りなようで近道かと思いますとのことでした・・・

下記は講師の方がhostsの設定を見せてくれました。

EvlDZsAVcAAANcp.jpg

0

こちら、ある方に相談しまして解決致しました!

結論ポート番号が原因でした・・・
50080→8080に変えたところ成功しました。

何かPCに入っているアンチウィルスソフトとか、そういった類のソフトで何かポートが制限されているかもしれないそうです。

もしくは、DYNAMIC AND/OR PRIVATE PORTS
49152番~65535番が使えないかもしれないとの予想でした。

なにかわかる方がいればよろしくお願い致します。

0
Help us understand the problem. What is going on with this answer?
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login