質問するログイン新規登録
Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

PHP

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

Docker

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

Q&A

解決済

1回答

433閲覧

docker desktopのapacheリバースプロキシについて

MisyaArtoseruku

総合スコア9

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

PHP

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

Docker

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

0グッド

0クリップ

投稿2024/10/31 07:26

編集2024/11/01 11:08

0

0

実現したいこと

Docker環境勉強中の初心者です。

docker desktop にてコンテナを3つ作りました。
コンテナは下記になります

・apacheコンテナ
・mysql
・laravel
・express

やりたい事は下記になります。

①クライアントがサービスに接続しにくる
②apacheのコンテナで受け取ってURLに合わせてリバースプロキシを利用(phpかnode.jsコンテナへ転送)
③コンテナで処理をする
④結果をapacheのコンテナへ返却
⑤apacheのコンテナからクライアントへレスポンスを返却

と上記のようにしたいです。
また、ユーザーの接続は「http://test.jp」みたいなものでポート番号等していしなくてもいいようにしたいです。

発生している問題・分からないこと

apacheのコンテナでURLに合わせてリバースプロキシをしたい。
でも、実際に添付のソースで作成した環境ですと接続に行くとコンテナが起動しません。
内容はポートの重複が発生してコンテナが起動できないとなります。

該当のソースコード

composer.yml

1version: '3.8' 2 3services: 4 express: 5 build: 6 context: ./express 7 dockerfile: Dockerfile 8 container_name: express_server 9 working_dir: /app/express 10 volumes: 11 - ./express:/app/express 12 environment: 13 - CHOKIDAR_USEPOLLING=true 14 command: ["npx", "nodemon", "--exec", "npx ts-node", "./src/index.ts"] 15 networks: 16 test-network: 17 ipv4_address: 172.18.0.4 18 19 laravel: 20 build: 21 context: ./laravel 22 dockerfile: Dockerfile 23 container_name: laravel_server 24 restart: unless-stopped 25 working_dir: /var/www 26 volumes: 27 - ./laravel:/var/www 28 - ./laravel/php.ini:/usr/local/etc/php/conf.d/php.ini 29 - ./logs:/var/log 30 environment: 31 - DB_HOST=mysql 32 - DB_DATABASE=test 33 - DB_USERNAME=test_user 34 - DB_PASSWORD=test_user 35 depends_on: 36 - mysql 37 command: sh -c "php artisan migrate --force && php artisan serve --host=0.0.0.0 --port=9000" 38 networks: 39 test-network: 40 ipv4_address: 172.18.0.5 41 42 mysql: 43 image: mysql:8.0 44 container_name: mysql_server 45 environment: 46 MYSQL_ROOT_PASSWORD: testpass 47 MYSQL_DATABASE: test 48 MYSQL_USER: test_user 49 MYSQL_PASSWORD: test_user 50 volumes: 51 - mysql_data:/var/lib/mysql 52 - ./mysql/init.sql:/docker-entrypoint-initdb.d/init.sql 53 ports: 54 - '3306:3306' 55 networks: 56 test-network: 57 ipv4_address: 172.18.0.2 58 59 apache: 60 image: httpd:2.4 61 container_name: apache_reverse_proxy 62 restart: unless-stopped 63 ports: 64 - "80:80" # HTTP用(ポート変更) 65 #- "443:443" # HTTPS用(必要に応じて有効化) 66 volumes: 67 - ./apache/conf/httpd.conf:/usr/local/apache2/conf/httpd.conf 68 - ./apache/conf/:/usr/local/apache2/conf/ 69 #- ./apache/certs/:/usr/local/apache2/conf/certs/ # SSL証明書用(必要に応じて有効化) 70 depends_on: 71 - express 72 - laravel 73 networks: 74 test-network: 75 ipv4_address: 172.18.0.1 76 77 78networks: 79 app-network: 80 driver: bridge 81 ipam: 82 config: 83 - subnet: 172.18.0.0/16 84

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

ポートの重複でコンテナが上手く動きませんでした。

補足

どうか皆様の知恵をお借りしたいです。
よろしくお願いします。

2024/11/01 追記
エラー内容を記載します。
申し訳ありません。
他に必要なエラー内容があればご指摘いただけますと有難いです。

[+] Stopping 1/0
✔ Container apache Stopped 0.0s

  • Container laravel_server Stopping 0.1s
  • Container mysql Stopping 0.1s
  • Container express Stopping 0.1s
    Error response from daemon: Address already in use

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

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

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

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

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

bsdfan

2024/10/31 11:27

> 内容はポートの重複が発生してコンテナが起動できないとなります。 どのようなエラーが出ているのか、エラーメッセージをそのまま質問に載せたほうがよいです。 (これだけの記載では、どこで、どんなエラーが起こっているのかがわかりません) とりあえず推定でコメントするとしたら、ホストOS(Windows)でポート80を使っているのではないでしょうか。
MisyaArtoseruku

2024/11/01 11:08

返信が遅くなりまして申し訳ありません。 エラー内容を追記しました。 ただ、他に必要なエラー出力等があればご指摘いただけると有難いです。
bsdfan

2024/11/03 03:15

エラーメッセージが Address already in use なので、ポートの重複ではなくアドレスの重複です。apache のコンテナで 172.18.0.1 を指定しているのが怪しいです。*.1 はゲートウェイが使っているんじゃないかと。違うアドレスにするとどうでしょう。 それ以前に、固定アドレスを使う必要がありますか?特にないならアドレスを何も指定しないのが一番いいと思います。
MisyaArtoseruku

2024/11/04 00:20 編集

アドレスが重複との事。 エラーに記載されていたのに申し訳ありませんでした。 固定にしようとしていた理由ですが、リバースプロキシで転送する際にアドレス指定をしようとしたからでした。 今後awsで構築しようと思ってるのですが、アドレス意外の転送方法が分から無かったので固定にしようとした次第です。 もし、それ以外の方法があるのでしたら固定に拘らないのですが、実現可能な方法はありますでしょうか? 質問ばかりで申し訳ありません。
MisyaArtoseruku

2024/11/05 01:35

別の方をベストアンサーとしてしまいましたが、丁寧にご回答いただき感謝しております。 ありがとうございました。
guest

回答1

0

ベストアンサー

もし、それ以外の方法があるのでしたら固定に拘らないのですが、実現可能な方法はありますでしょうか?

はい、デフォルト状態でもdocker-compose.ymlで指定したサービス名は、そのままホスト名として使えます(参考)。

Networking in Compose(Docker公式、英語)

投稿2024/11/04 03:17

maisumakun

総合スコア146702

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

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

MisyaArtoseruku

2024/11/05 01:34

勉強不足でした。 ご提示頂いた情報で再度勉強いたします。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問