Доступ к веб-приложению, размещенному в Docker, с хост-компьютера

#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:

изображение сообщения об ошибке chrome

при работе «регулярно» с:

 docker run -dp 80:80 nginx
 

или даже

 docker run -itdp 80:80 nginx
 

Мы пытаемся получить доступ через chrome:

nginx запущен и работает изображение

и в любом случае при запуске 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, не знаю почему. Также статус контейнера показывает, что он завершен.