Невозможно получить доступ к сайту в docker -compose - PullRequest
0 голосов
/ 08 мая 2020

Я использовал: docker build -t devstack .

docker run --rm -p 443:443 -it -v ~/code:/code devstack

До сих пор у меня все работало нормально. Я смог получить доступ к сайту, как и ожидалось, через свой браузер. Я установил свой файл hosts так, чтобы devstack.com указывал на 127.0.0.1, и сайт загружался нормально. Теперь я пытаюсь использовать docker -compose, чтобы я мог использовать некоторые из имеющихся там функций для более простого подключения к AWS.

services:
  web:
    build:
      context: .
    network_mode: "bridge"
    ports:
      - "443"
      - "80"
    volumes:
      - ~/code:/code
    image: devstack:latest 

Итак, я запускаю docker-compose build, который дает мне знакомый создавать файлы из Dockerfile. Затем я запускаю docker-compose run web, который помещает меня в виртуальную машину, где я запускаю apache (в настоящий момент делаю это вручную), нажимаю top, чтобы убедиться, что он работает, а затем просматриваю файлы журнала. Но когда я пытаюсь зайти на сайт в своем браузере, я получаю: devstack.com refused to connect. и никаких журналов в файлах apache журналов, так что до apache не дойдет. Так что что-то в портах мне не открывается. Есть идеи, что мне нужно изменить, чтобы эта работа работала?

Изменить: обновленный файл. Все еще та же проблема:

version: "3"
services:
  web:
    build:
      context: .
#    Same issue with both of these:
#    network_mode: "bridge"
#    network_mode: "host"
    ports:
      - "443:443"
      - "80:80"
    volumes:
      - ~/code:/code
    tty: true

1 Ответ

0 голосов
/ 08 мая 2020

Вот что я сделал, чтобы он заработал. Я использовал пример проекта docker -compose, показанный в их документации, который запускает тестовое приложение на порту 5000. Это сработало, поэтому я знал, что это возможно.

Я обновил свой docker -compose. yml, чтобы он был очень похож на тот, что был в тестовом проекте. Теперь это выглядит так:

version: "3"
services:
  web:
    build: .
    ports:
      - "443:443"
      - "80:80"
    volumes:
      - ~/code:/code

Затем я создал запись. sh файл, который будет запускать apache, и добавил это в свой Dockerfile:

# copy the entry file which will start apache
COPY entry.sh entry.sh
RUN chmod +x entry.sh

# start apache
CMD ./entry.sh; tail -f /var/log/apache2/*.log

Итак теперь, когда я сделаю docker-compose up, он запустит apache и завершит файлы журнала apache. Поэтому я сразу вижу вывод файлов журнала apache на терминал. Тогда я могу получить доступ к сайту. В основном проблема заключалась только в выходе виртуальной машины. Это был единственный способ предотвратить его выход, не выполнив tty = true в docker -compose, который, хотя и удерживал его от выхода, не публиковал sh порты.

...