#docker #web-applications #localhost
Вопрос:
Я создал веб-приложение php и разместил его в Docker. Теперь я пытаюсь получить доступ к приложению с хост-машины(не через докер) и не могу его открыть.Любая помощь будет очень признательна!
Подробности — OS — Каталина
Accessing :- http://localhost:60
Error-
This page isn’t workinglocalhost didn’t send any data.
ERR_EMPTY_RESPONSE
Followed the below steps :-
Shrutis-MacBook-Pro:MyDockerImages shrutipatnaik$ ls
index.php world.txt
Dockerfile
Shrutis-MacBook-Pro:MyDockerImages shrutipatnaik$ docker build -t jenkins_php .
Sending build context to Docker daemon 653.8MB
Step 1/3 : FROM php:7.4-apache
---> 05e7c943eaa9
Step 2/3 : COPY . /var/www/html
---> e30136f8e0c7
Step 3/3 : CMD ls amp;amp; whoami amp;amp; pwd ;
---> Running in 4c29020952fb
Removing intermediate container 4c29020952fb
---> dd0a9d7f8ccd
Successfully built dd0a9d7f8ccd
Successfully tagged jenkins_php:latest
Shrutis-MacBook-Pro:MyDockerImages shrutipatnaik$docker run -it -d -p 60:60
jenkins_php:latest /bin/sh
26e3590f0e6a249f26251c33020a8180610ce07ff11004dc3dc2460a3aa41790
Shrutis-MacBook-Pro:MyDockerImages shrutipatnaik$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED
STATUS PORTS NAMES
26e3590f0e6a jenkins_php:latest "docker-php-entrypoi…" 6 hours ago
Up 6 hours 60/udp, 0.0.0.0:60->60/tcp, 80/tcp kind_chatelet
Комментарии:
1. Я не использую macOS, но я считаю, что вы не можете использовать
localhost
для доступа к контейнерам Docker (работающим на виртуальной машине) с хоста. Вместо этого вы можете использоватьhost.internal.docker
. Кроме того, вы ссылаетесь на порты 60 и 80. Какой порт обслуживает приложение PHP?
Ответ №1:
Хорошо, две вещи:
во — первых, когда вы запускаете контейнер с /bin/sh
помощью команды, в конце концов, это команда, которую выполняет контейнер, а не ваше веб-приложение. См.Используемый файл docker изображения docker ENTRYPOINT
и CMD
команды и.
когда вы добавляете команду в конце docker run
команды, вы переопределяете предварительно настроенные команды запуска:
Использование: запуск докера [ПАРАМЕТРЫ] ИЗОБРАЖЕНИЕ [КОМАНДА] [ARG…]
Для этой пробежки docker run -dp 60:60 jenkins_php:latest
пример с nginx:
при запуске, как указано в вопросе:
docker run -itdp 80:80 nginx /bin/sh
Мы пытаемся получить доступ через chrome:
при работе «регулярно» с:
docker run -dp 80:80 nginx
или даже
docker run -itdp 80:80 nginx
Мы пытаемся получить доступ через chrome:
и в любом случае при запуске docker ps
отображается не новая команда, а старый сценарий точки входа (как в вопросе), даже если он был переопределен:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3fe92585a40c nginx "/docker-entrypoint.…" 3 seconds ago Up 2 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp adoring_heisenberg
во — вторых, также возможно, что после исправления это не сработает, потому что вы также опубликуете порт 80/tcp, и если вы специально не выбрали, что по умолчанию имело бы больше смысла публиковать на 80, поэтому я бы проверил это по пути.
для этой пробежки docker run -dp 80:80 jenkins_php:latest
если мы попытаемся повторить, как в предыдущей неправильной конфигурации, мы получим ту же ошибку
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
146d05cc5275 nginx "/docker-entrypoint.…" 3 seconds ago Up 2 seconds 80/tcp, 0.0.0.0:80->1000/tcp, :::80->1000/tcp goofy_lamport
localhost не отправлял никаких данных.
ERR_EMPTY_RESPONSE
Комментарии:
1. Я попробовал ниже ,как было предложено, без /bin/sh, контейнер вышел и та же ошибка (этот сайт недоступен, локальный хост отказался подключаться).
2. MacBook$ запуск докера-itdp 160:160 jenkins_php:последняя версия nginx d914159e6aa2deab1280e36774ea7a2f19fcaad67f836a9d626bbf04e99d2e4f КОМАНДА С ИДЕНТИФИКАТОРОМ КОНТЕЙНЕРА СОЗДАЛА СТАТУС ИМЕН ПОРТОВ d914159e6aa2 jenkins_php:последняя версия «докер-php-вход…» 2 минуты назад Вышел (127) 2 минуты назад objective_davinci
3. Когда я пытаюсь использовать соотношение 80:80 ,я получаю следующую ошибку. MacBook$запуск докера-itdp 80:80 jenkins_php:последняя версия apache eaf3ec71bb04b34ed1be848ff347fe463d258eaba8871dfd99bf4d6e25ec9046 докер: Ответ на ошибку от демона: Порты недоступны: прослушивание tcp 0.0.0.0:80: привязка: адрес уже используется.
4. возможно, это связано с тем, что порт 80 уже используется контейнером или другой программой, вам не нужно привязываться к порту 80 на хосте только в контейнере. например, вместо этого используйте порт 8080
8080:80
5. попробовал с 8080:80, я все еще получаю ERR_EMPTY_RESPONSE, не знаю почему. Также статус контейнера показывает, что он завершен.