nakad119
@nakad119

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

docker-compose.ymlのportsの設定内容について

localhostで表示したい時に、docker-compose.ymlのportsには何の番号を設定するのか

色んなサンプルやチュートリアルを参考にdocker-compose.ymlを作成したのですが、
portsが正しくないようでローカルホストでの表示が確認できませんでした。
サンプルには「8080:8080」「5432:5432」「80:80」など複数のパターンがありましたが中々うまくいきませんでした。

何卒、解決の手掛かりとなる内部の仕組みや考え方なども教えていただきたいです。

該当するソースコード

<ファイルの構造>

C:.
└─php_docker_sample
    │  docker-compose.yml
    │
    └─php
            index.php

<docker-compose.yml>

# ./docker-compose.yml

version: '3'

services:
  web:
    image: php:7.3-apache
    container_name: php_web
    volumes:
      - ./php/:/var/www/html/
    ports:
      - "8080:8080"
    stdin_open: true
    tty: true

<index.php>

<html>
    <head>
        <title>Hello World</title>
    </head>

    <body>
        <?php
            echo "Hello, World!";
        ?>
    </body>
</html>

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

http://localhost:8080/』にアクセスできない。
image.png

自分で試したこと

・いくつかのパターンを試してみました。
 その内でローカルホストで画面が表示されたのは下記内容時でした。
 ただ、どうしてコレなら問題無いのかが分からずじまいでモヤモヤしております。

    ports:
      - "8080:80"
0

3Answer

docker-composeファイルのportsの記述ルールは確認済でしょうか。

調べていただくとすぐに見つかると思いますが、ポート番号については以下のルールで記述する必要があります。

    ports:
      - "<Host Port>:<Container Port>"

<Host Port>8080にした場合は、
ブラウザでhttp://localhost:8080を入力する必要があります。

また、docker-compose.ymlを確認すると、image: php:7.3-apacheとなっていますね。
ApacheはWebサーバーですので、コンテナ側のポート番号、<Container Port>80番いうルールです。

以上をふまえて、、、
docker-compose.ymlに以下のように記述したときは、
ブラウザでhttp://localhost:8080と入力したときに、コンテナの80番ポートにアクセスできます。

    ports:
      - "8080:80"

この回答でいかがでしょうか?

参考記事(Docker で Apache + PHP コンテナを作る方法)
https://lazesoftware.com/ja/blog/230220/

2Like

Docker Composeを確認してください:

ターミナルを開いて、docker-compose.yml ファイルがあるフォルダに移動し、以下のコマンドを実行してサービスを起動していることを再確認してください。

docker-compose up -d

-dフラグはサービスをデタッチモードで実行するため、バックグラウンドで続行します。

ポートの競合を確認してください:

ローカルマシンでポート8080を使用している他のアプリケーションやサービスがないことを確認してください。同じポートを別のアプリケーションが使用している場合、競合が発生し、PHPアプリケーションがlocalhost:8080でアクセスできなくなる可能性があります。以下のコマンドを使用してポートの競合を確認できます:

sudo lsof -i :8080

ポート8080を使用しているプロセスが見つかった場合は、それらのサービスを停止または再構成する必要があるかもしれません。

Dockerコンテナのログを確認してください:

アプリケーションがまだ動作していない場合は、Dockerコンテナのログを確認してエラーがないかを確認してください。以下のコマンドを使用してコンテナのログを表示できます:

docker logs php_web

php_webの部分は、docker-compose.ymlファイルで指定されている実際のコンテナ名に置き換えてください。

2Like

Comments

  1. チョコと!

    image: php:7.3-apache

    のイメージをビルドする過程でportを80番にする仕様にしたと思われます。(作成者のみ知る)

    docker-compose up 
    docker compose up 
    

    docker-cli-composeをインストールすると機能upします。

    -dフラグはフォアグラウンドサービスをデタッチモードで抜けることで、あたかもバックグラウンド実行のようにユーザにみせかけています。但し、ダウンロードしたイメージが
    バックグラウンド実行を想定しているapache場合は-dの有無に変化はないかも?

    よって、-d無しで実行し、apacheのフォアグラウンメッセージを確認しながら(運が良ければport番号が確認可能)、ブラウザ接続テストすると良いです。問題なければ、ctrl+cで抜け、-d付きで実行すると便利です。

    尚、docker-compose.ymlにcommand:記述があるイメージ、できれば、Dockerfileのあるイメージを探すことを推奨します。

私は異なるフォルダパスとブラウザのURLを持つ2つのタイプを試しましたが、どちらもブラウザでアクセス可能です。プロジェクトのフォルダ名はphp_projectです。

最初のものは:

➜  php_project tree
.
├── docker-compose.yml
└── index.php

1 directories, 2 files

docker-compose.ymlファイルは以下のようになっています:

version: '3'

services:
  web:
    image: php:7.3-apache
    container_name: php_web
    volumes:
      - ./index.php:/var/www/html/index.php
    ports:
      - "8080:80"

ブラウザで http://localhost:8080 を訪れると、「Hello, World!」という出力が表示されます。

もう一つは次のようなものです:

➜  php_project tree
.
├── docker-compose.yml
└── php
    └── index.php

2 directories, 2 files

docker-compose.ymlファイルは以下のようになっています:

version: '3'

services:
  web:
    image: php:7.3-apache
    container_name: php_web
    volumes:
      - ./php:/var/www/html
    ports:
      - "8080:80"

今度は、http://localhost:8080ではなくhttp://localhost:8080/index.phpにアクセスしてください。

0Like

Your answer might help someone💌