続2・ Apache のレスポンスが壊れる
◆ 現象が起きる fedora 31 をホストにした Docker 環境だと別 OS でも起きる
◆ ↑の fedora 31 以外だと同じ OS でも起きていない
◆ ↑の fedora 31 以外だと同じ OS でも起きていない
前回調べた結果 「fedora 31 の Apache でネットワーク経由でマウントしたフォルダを DocumentRoot にすると発生する」 としていましたがそうでもないようです
まず起動では cifs mount を可能にするため --cap-add オプションをつけます
Docker 内部の処理はこれです
mount で指定している //win-pc/public のところを Windows の公開フォルダの合わせて書き換えます
公開フォルダの中に docroot フォルダを作って中に 1.html を配置します
nano で編集する部分は以下のテキストを最後に追記するだけです
>> リダイレクトでもいいかもしれません
これで起動したサーバにアクセスします
再現していますね
この fedora 31 のホスト自体でも Apache の問題は起きています
また 非 Docker 環境の CentOS 7 と CentOS 8 と fedora 27 では発生しませんでした
ホストの fedora 31 も VM で 非 Docker 環境の CentOS 7 と 8 は fedora 31 と同じホストで動作しています
非 Docker の fedora 27 は VM ですが fedora 31 などとは別の物理マシンです
まとめると
fedora 31 を通すと Docker 環境でもおかしくなるようです
一応マウントはコンテナ内でネットワーク経由で行うようにしているので ホストの影響は受けなそうなのですけどね
Docker だと内部ではホストでマウントしてそれをコンテナからアクセス可能にするような動きなんでしょうか
この fedora 31 だけがおかしいのかもしれませんが 他に fedora 31 を入れて試すのも面倒なので fedora 31 全体の問題なのか この環境だけの問題なのかはわかってません
手順
Docker 環境を使って簡単に再現させるための手順を用意しましたまず起動では cifs mount を可能にするため --cap-add オプションをつけます
docker run --cap-add SYS_ADMIN --cap-add DAC_READ_SEARCH -it fedora
Docker 内部の処理はこれです
dnf install cifs-utils httpd nano
mount -t cifs -o username=user,password=pass //win-pc/public /mnt
nano /etc/httpd/conf/httpd.conf
httpd
mount で指定している //win-pc/public のところを Windows の公開フォルダの合わせて書き換えます
公開フォルダの中に docroot フォルダを作って中に 1.html を配置します
<h1>1</h1>
nano で編集する部分は以下のテキストを最後に追記するだけです
>> リダイレクトでもいいかもしれません
DocumentRoot /mnt/docroot
<Directory /mnt/docroot>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
<IfModule mod_deflate.c>
SetOutputFilter DEFLATE
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
</IfModule>
これで起動したサーバにアクセスします
[root@261f5b87d9fc /]# curl http://localhost/1.html
curl: (1) Received HTTP/0.9 when not allowed
再現していますね
fedora 31 経由すると
これを fedora 31 のホストで CentOS 7, CentOS 8, fedora 27, fedora 31 のコンテナを使って試したところ全てで再現しましたこの fedora 31 のホスト自体でも Apache の問題は起きています
また 非 Docker 環境の CentOS 7 と CentOS 8 と fedora 27 では発生しませんでした
ホストの fedora 31 も VM で 非 Docker 環境の CentOS 7 と 8 は fedora 31 と同じホストで動作しています
非 Docker の fedora 27 は VM ですが fedora 31 などとは別の物理マシンです
まとめると
- 物理マシン
- fedora 31 ✖
(Docker)
- CentOS 7 ✖
- CentOS 8 ✖
- fedora 27 ✖
- fedora 31 ✖
- CentOS 7 ✔
- CentOS 8 ✔
- 物理マシン
- fedora 27 ✔
fedora 31 を通すと Docker 環境でもおかしくなるようです
一応マウントはコンテナ内でネットワーク経由で行うようにしているので ホストの影響は受けなそうなのですけどね
Docker だと内部ではホストでマウントしてそれをコンテナからアクセス可能にするような動きなんでしょうか
この fedora 31 だけがおかしいのかもしれませんが 他に fedora 31 を入れて試すのも面倒なので fedora 31 全体の問題なのか この環境だけの問題なのかはわかってません