derasado
@derasado (Sado)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

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)を作成し、簡単な処理を実行。

0

6Answer

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

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

Comments

  1. @derasado

    Questioner

    harmlessさん
    ご回答いただきましてありがとうございます。


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

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

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

    上の対応でいったん試したうえで、
    もしまだ駄目であれば、
    * dockfile「ファイルのコピー」次行削除
    * docker-composeファイルのvolumes項目削除
    し、「./src」と「/var/www/html」の連携を一度切ってみた方が良いかもです。
  3. @derasado

    Questioner

    ありがとうございます。
    試してみましたが、ダメでした・・・
  4. もし可能であれば、「Dockfile」と「docker-compose.yml」をコードで貼り付けてもらえませんか?
  5. @derasado

    Questioner

    コード貼り付け致しました。
    「Dockfile」に関しては、docker/app/Dockerfileもありますが、
    「Dokcerfile」の方でよろしかったでしょうか?
    ご確認よろしくお願い致します。

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

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

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

0Like

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

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

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

0Like

Comments

  1. @derasado

    Questioner

    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は記述が不明なため一旦コメントアウト。

0Like

Comments

  1. @derasado

    Questioner

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

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

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

    ※コマンドでgoogle検索するなら「docker rmi image」とか。
  3. @derasado

    Questioner

    実行したところダメでしたので、コンテナとイメージを削除致しました!

  4. @derasado

    Questioner

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

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

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

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

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

追記ですが

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

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

EvlDZsAVcAAANcp.jpg

0Like

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

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

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

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

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

0Like

Your answer might help someone💌