Docker compose с nginx продолжает отображать страницу приветствия - PullRequest
0 голосов
/ 05 июня 2018

Я новичок в docker и пробую простейший docker-compose.yml, показывающий страницу приветствия мира, чтобы построить на ней в конце концов полный стек LEMP , который будет иметьтот же конфиг, что и мой сервер.Однако большинство уроков устарели, и существует так много способов использования docker , что я не могу найти один, использующий только Docker compose v3, который все еще актуален.Я проверил документы, и это очень запутанно и для начинающего, пытаясь заставить его работать в течение последних 5 часов, поэтому я подумал, что я должен спросить об этом.

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: последний я получаю очень многословную ошибку, содержащую эту фразу: «неизвестно: вы пытаетесь смонтировать каталог в файл (или наоборот)? Проверьте, существует ли указанный путь к хосту иожидаемый тип ".

ОБНОВЛЕНИЕ о docker-compose.yml:

  • Без строки "./code:/usr/share/nginx/html" папка /usr/share/nginx/html содержит индекс по умолчанию.html файл (ожидаемый)
  • Со строкой "./code:/usr/share/nginx/html" папка /usr/share/nginx/html имеет размер EMPTY !
  • Со строкой "./:/usr/share/nginx/html", /usr/share/nginx/htmlВ папке есть и пустая папка «code», и куча случайных тестовых файлов, которые я недавно удалил.

Между попытками я запускаю сценарий сброса, чтобы убедиться, что я запускаю заново:

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

Running docker inspect <container> возвращает это значение для тома, не уверенный, что это нормально, что тип является «bind» для bind mouNT вместо громкости .

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

1 Ответ

0 голосов
/ 05 июня 2018

Легко смонтировать свою собственную привет страницу мира.Я объясню это с помощью официального 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

Теперь прочитайте nginx.conf, используя cat.Самая важная строка в этом файле:

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;
}

В compose вы перезапишете 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, пока они находятся в указанном вами месте.Длинный ответ, но я надеюсь, что это поможет.

...