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

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

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

CGI(Common Gateway Interface)とは、Webサーバー上でユーザプログラム動作させる仕組みのこと。また、動かす前提のプログラムをCGIと呼ぶこともあります。HTMLなどの静的な情報に限らず、プログラムの処理結果をベースにした動的情報の提供が可能です。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

Docker

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

Q&A

解決済

1回答

464閲覧

Dockerコンテナ間のボリューム共有に関する謎

FUGAMARU-MCPE

総合スコア33

CGI

CGI(Common Gateway Interface)とは、Webサーバー上でユーザプログラム動作させる仕組みのこと。また、動かす前提のプログラムをCGIと呼ぶこともあります。HTMLなどの静的な情報に限らず、プログラムの処理結果をベースにした動的情報の提供が可能です。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

Docker

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

0グッド

1クリップ

投稿2023/01/27 20:31

まずはやったことを箇条書きスタイルで書きます。

Docker入門のため、あえてdocker-composeは使わずコマンドを打ってコンテナを立てている。

その中で、Docker Hubのnginx:latestとwordpress:php8.0-fpmを使ってWordPressを構築しようと試みた。(DBは今回の件に直接関係無いので置いておく。)

コンテナ間でデーターを共有する必要があるので、バインドマウントをするために、
nginxのdocker run時に-v D:¥wp:/usr/share/nginx/html
WordPressのdocker run時には-v D:¥wp:/var/www/html
とオプションを付与し、ホスト側のパスとDocker Hubでドキュメントに記載されていたパスをそれぞれ紐付けた。(ネットワークもそれぞれ同じものを指定しているので同一ネットワークにいる)

しかし、ホストからブラウザーを使ってnginxにアクセスしても404が返って来てしまった。
WordPressのファイルが生成されていることはホスト側からもそれぞれのコンテナからも確認済みなので、nginxの設定ファイル(/etc/nginx/conf.d/default.conf)を見てみたが特におかしいところはなかった。(中身もWordPress用に編集した)

試行錯誤している途中で、設定ファイルで定義しているベースディレクトリを/usr/share/nginx/htmlから/var/www/htmlに変更したところ、404が出なくなった。

と言ったことがありました。

ここで不可解なのは、お互いのコンテナは独立しているはずなのに、nginxのコンテナから、nginxのコンテナには存在しないパスを参照できているということです。
それと、「WordPressのコンテナの中の/var/www/html」とも指定していないのに勝手にWordPressのコンテナの中を見に行っているという挙動も謎です。(見に行っているという表現は正しく無いと思いますが何が起こってるのか謎なのでこう言った言い回しになってます)
おそらくボリュームが関係しているのだと思いますが意味が分かりません。

詳しい方ご教授願えませんでしょうか。

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

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

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

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

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

dameo

2023/01/27 21:26 編集

独立してるコンテナからそれぞれホスト内の同じディレクトリをバインドマウントしてるんだから当たり前ですよね、謎はどこにもないと思いますよ。後docker以外のタグは関係ないので削除してください。
FUGAMARU-MCPE

2023/01/28 01:54

コンテナ作成時にそれぞれ別のdestinationを指定しているので当たり前では無いと思うのですが。 本文にも記載しているように、実際、nginxのコンテナには/var/www/htmlなんていうディレクトリは存在しません。
yuma.inaura

2023/01/28 01:59

再現するコードや具体的なコマンド手順は載せられますか?文章での説明ではなく
dameo

2023/01/28 03:00 編集

sourceとdestinationの関係ではありませんよ。 同じD:¥wpというフォルダを各コンテナ上のmount pointでbind mountしてるだけです。 nginxを動かすコンテナ上だと/usr/share/nginx/htmlがmount pointになります。 WordPressを動かすコンテナ上だと/var/www/htmlがmount pointになります。 unixライクなOSのmountの概念を調べてください。 https://atmarkit.itmedia.co.jp/ait/articles/1802/15/news035.html docker以前の当たり前の知識が不足してるのかと思います。 後二度目ですがdocker以外のタグは関係ないので削除してください。
FUGAMARU-MCPE

2023/01/28 07:35

melianさん 仰せの通り、SCRIPT_FILENAMEが原因でした。 コメントいただきありがとうございます。
guest

回答1

0

自己解決

Docker側の問題ではなく、nginxの問題でした。
以下、正常に稼働するコンテナの作成手順です。
また、今回の件に関してブログにまとめたので一応リンクを張っておきます。

bash

1# Network / Volume の作成 2Host $ docker network create mynetwork 3Host $ docker volume create myvolume 4# MySQLの準備 5Host $ docker volume create db 6Host $ docker run --name mysql -dit --net mynetwork -v db:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=rootpass -e MYSQL_DATABASE=mydatabase -e MYSQL_USER=hoge -e MYSQL_PASSWORD=piyo mysql:5.7 7# nginxの準備 8Host $ docker run --name nginx -dit --net mynetwork -v myvolume:/usr/share/nginx/html -p 8080:80 nginx 9# この時点で localhost:8080 にアクセスするとnginxのWelcomeページが表示されることを確認 10# WordPressの準備 11Host $ docker run --name wordpress -dit --net mynetwork -v myvolume:/var/www/html -e WORDPRESS_DB_HOST=mysql -e WORDPRESS_DB_USER=hoge -e WORDPRESS_DB_PASSWORD=piyo -e WORDPRESS_DB_NAME=mydatabase wordpress:php8.0-fpm 12# nginxの設定 13## nginxによって生成される静的ファイル(Welcomeページ等)を消しておく 14Host $ docker exec -it nginx bash 15nginx $ rm /usr/share/nginx/html/index.html /usr/share/nginx/html/50x.html 16## nginxの設定ファイルをWordPress用に書き換える 17nginx $ apt update && apt install nano -y 18nginx $ nano /etc/nginx/conf.d/default.conf # 編集後ファイルの上書き保存を忘れずにやる

編集後のdefault.confの中身

server { listen 80; server_name localhost; root /usr/share/nginx/html; index index.php; client_max_body_size 32M; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass wordpress:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name; # fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; だと繋がらない! fastcgi_param PATH_INFO $fastcgi_path_info; } }

bash

1# 設定の適用 2nginx $ service nginx reload

localhost:8080にアクセスしてWordPressの初期設定画面が出ることを確認

投稿2023/01/28 07:37

FUGAMARU-MCPE

総合スコア33

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

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

dameo

2023/01/28 08:37

同じフォルダを別コンテナから書き換えたことを質問者さんが認識できていなかっただけですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問