docker run vs docker-compose одна из этих вещей не похожа на другую - PullRequest
0 голосов
/ 07 марта 2019

У меня есть настройка прокси nginx с шеллскриптом, который выглядит примерно так:

docker run --detach --name nginx-proxy --publish 80:80 --publish 443:443 --volume /etc/nginx/certs \
--volume /etc/nginx/vhost.d --volume /usr/share/nginx/html --volume /var/run/docker.sock:/tmp/docker.sock:ro --restart unless-stopped jwilder/nginx-proxy:alpine
echo proxy up
docker run --detach --name nginx-proxy-letsencrypt --volumes-from nginx-proxy --volume /var/run/docker.sock:/var/run/docker.sock:ro \
--restart unless-stopped jrcs/letsencrypt-nginx-proxy-companion
echo ssl companion up

docker run -d \
-e VIRTUAL_HOST=[domain] \
\-e "LETSENCRYPT_HOST=[domain]" \
-e "LETSENCRYPT_EMAIL=[emailaddress]" \
--name [domain] \
--expose 80 \
--restart always \
-v /code/[domain]:/var/www/html \
fauria/lamp


    echo test site up at [domain]

, и этот сайт работает должным образом и функционирует, как и ожидалось.Затем я останавливаю контейнер веб-сервера и использую следующий docker-compose.yaml, и он завершается с ошибкой 502 ..

version: '3.3'
services:
  lamp:
    restart: always
    image: fauria/lamp
    container_name: [domain]
    expose:
      - "80"
    volumes:
      - /code/[domain]:/var/www/html
    environment:
      - VIRTUAL_HOST=[domain]
      - LETSENCRYPT_HOST=[domain]
      - LETSENCRYPT_EMAIL=[emailaddress]

Почему?Разве они не одинаковы?Чего мне не хватает?

Ответы [ 2 ]

0 голосов
/ 07 марта 2019

Проблема в том, что я не подключал свой docker-compose к сети моста, используемой по умолчанию в образе прокси.

version: '3.3'
services:
  lamp:
    restart: always
    image: fauria/lamp
    network-mode: bridge
    container_name: [domain]
    expose:
      - "80"
    volumes:
      - /code/[domain]:/var/www/html
    environment:
      - VIRTUAL_HOST=[domain]
      - LETSENCRYPT_HOST=[domain]
      - LETSENCRYPT_EMAIL=[emailaddress]
0 голосов
/ 07 марта 2019

Когда вы используете docker-compose, docker-compose создает для вас сеть докеров, в которой все сервисы могут взаимодействовать друг с другом. Поскольку вы просто остановили контейнер и запустили его с помощью docker-compose, теперь у него нет доступа к контейнерам на вашем локальном хосте. Вот почему вы получаете ошибку 502. Что вам нужно сделать, это добавить другие контейнеры в ваш файл компоновки Docker и убедиться, что вы подключаетесь к хостам, используя правильное имя службы (вместо localhost используйте http://service_name:443). В качестве альтернативы вы можете как-то указать контейнеры в вашем Доступ в Docker по сети к вашему локальному хосту, но я не уверен, как это сделать. Возможно, вам нужно использовать 0.0.0.0 вместо 127.0.0.1?

...