web-dev-qa-db-ja.com

nginxでのDockerの作成でウェルカムページが表示され続ける

私はdockerの初心者であり、hello worldページを表示する最も単純なdocker-compose.ymlを試して、最終的に完全なLEMPで構築します私のサーバーと同じ設定を持つスタック。ただし、ほとんどのチュートリアルは廃止されており、dockerを使用する方法が多すぎるため、Docker composev3のみを使用する方法を見つけることができませんそれはまだ実際です。私はドキュメントをチェックしましたが、初心者にとっても非常に混乱しており、過去5時間動作させるように試みていたので、私はSOに質問したいと思いました。

docker-compose.yml

version: '3'
services:
  web:
    image: bitnami/nginx:1.10.3-r0 #using this version as it's the same on my server
    volumes:
      - "./test.conf:/etc/nginx/sites-available/test.local"
      - "./test.conf:/etc/nginx/sites-enabled/test.local"
      - "./code:/var/www/html" #code contains only a basic index.html file
    ports:
      - "80:80"

test.conf

server {
    listen 80;
    listen [::]:80;
    server_name test.local;

    index index.html; #Only a basic helloworld index.html file
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/html;
}

これにはDockerfileが必要ですか?チュートリアルはそれが必要であると述べていないようです。

注:
ボリュームを追加しようとしました

- "./default.conf:/etc/nginx/conf.d/default.conf"

nginx:latestを使用しても、何も変更されず、ウェルカムページは引き続き読み込まれます。「不明:ディレクトリをファイルにマウントしようとしていますか? (またはその逆)?指定されたホストパスが存在し、予期されたタイプであるかどうかを確認してください。

docker-compose.ymlについての更新:

  • 行なし"./code:/usr/share/nginx/html"/usr/share/nginx/htmlフォルダーには、デフォルトのindex.htmlファイルが含まれています(予期されています)
  • "./code:/usr/share/nginx/html"/usr/share/nginx/htmlフォルダは[〜#〜]空[〜#〜]
  • "./:/usr/share/nginx/html"/usr/share/nginx/htmlフォルダーには空の「コード」フォルダーがあり、先ほど削除したランダムなテストファイルがたくさんあります。

試行の合間に、リセットスクリプトを実行して、確実に最初からやり直します。

docker rm $(docker ps -a -q)
docker rmi $(docker images -q) --force
docker volume rm $(docker volume ls -q)

ランニング docker inspect <container>はボリュームに対してこれを返しますが、タイプが「バインド」であることが ボリューム ではなく バインドマウント であることが正常であるかどうかは不明です。

"Mounts": [
    {
        "Type": "bind",
        "Source": "/e/DEV/sandbox/docker",
        "Destination": "/usr/share/nginx/html",
        "Mode": "rw",
        "RW": true,
        "Propagation": "rprivate"
    }
],
8

独自のhello worldページをマウントするのは簡単です。公式のnginx:latest画像を使用して説明しますが、必要に応じてbitnami画像を使用して自分で説明できます。

最初は非常に基本的です。 nginxコンテナを実行するだけです(docker-composeなし)。私はそれを詳細かつ基本的に説明します。もちろん、より高度なコマンドや高速なコマンドを実行してコンテナ内のファイルを読み取ることもできますが、これは初心者にはわかりにくいかもしれません。したがって、コンテナーを実行してmy-nginxという名前を付けます。

$ docker run --rm -d -p 80:80 --name my-nginx nginx

localhost:80に移動すると、デフォルトのnginxページが表示されます。これで、コンテナーの名前を使用してコンテナー内で実行できます。 execは「コンテナの内部」に移動するので、ファイルを確認できます。

$ docker exec -it my-nginx bash
root@2888fdb672a1:/# cd /etc/nginx/
root@2888fdb672a1:/etc/nginx# ls
conf.d      koi-utf  mime.types  nginx.conf   uwsgi_params
fastcgi_params  koi-win  modules     scgi_params  win-utf

catを使用してnginx.confを読んでください。このファイルの最も重要な行は次のとおりです。

include /etc/nginx/conf.d/*.conf;

つまり、そのディレクトリ内のすべてのconfsが使用/読み取りされます。 /etc/nginx/conf.d/に移動します。

root@2888fdb672a1:~# cd /etc/nginx/conf.d/
root@2888fdb672a1:/etc/nginx/conf.d# ls
default.conf

default.confが唯一のファイルです。このファイル内に構成が表示されます。

listen       80;
server_name  localhost;

location / {
    root   /usr/share/nginx/html;
    index  index.html index.htm;
}

サーバーはローカルホスト、ポートは80、表示されるファイルはディレクトリ/usr/share/nginx/html/にあります

次に、コンテナ内のそのファイルを確認します。

root@2888fdb672a1:/etc/nginx/conf.d# cat /usr/share/nginx/html/index.html
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
...

予期されるファイルです。これは、表示される「ようこそNginxへ」ページです。では、自分のindex.htmlをどのように表示できますか? /usr/share/nginx/htmlにマウントするだけです。

docker-compose.yamlは次のようになります。

version: '3'
services:
  web:
    image: nginx:latest
    volumes:
      - ./code:/usr/share/nginx/html
    ports:
      - "80:80"

コードディレクトリには、index.htmlとhello worldが含まれています。 docker-compose up -d --buildを実行すると、localhost:80をカールすると、自分のindex.htmlが表示されます。

本当にコードを/var/www/htmlではなく/usr/share/nginxに配置したい場合は、それを行うことができます。

test.confを使用してください。ここで、ファイルを/var/www/html/に配置するように定義します。

server {
    listen 80;
    listen [::]:80;
    server_name test.local;

    index index.html; #Only a basic helloworld index.html file
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/html;
}

作成では、default.confを独自のconfで上書きし、nginxに/var/www/htmlを参照するように指示します。作成は次のようになります。

version: '3'
services:
  web:
    image: nginx:latest
    volumes:
      - "./test.conf:/etc/nginx/conf.d/default.conf"
      - "./code:/var/www/html"
    ports:
      - "80:80"

自分の指定した場所にある間、自分のindex.htmlも表示されます。長い答えですが、これが役に立てば幸いです。

7
lvthillo