Контейнер PHP не может видеть мое приложение на localhost - PullRequest
0 голосов
/ 25 февраля 2019

Я хочу запустить приложение PHP на контейнере, а когда мне нужно перейти на localhost: 5000, чтобы увидеть веб-сайт.Когда я запускаю контейнер, я не вижу веб-сайт на localhost: 5000, только 172.12.0.6:80 (я не знаю, что это за ip).

Это файл dockerfile:

FROM php:7.0-apache
RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf
COPY ./index.php /var/www/html/
EXPOSE 5000

это index.php, если вам интересно (я знаю, что это сложно):

<html>
<title>website</title>
        <body>
                <?php
                        echo "hello world";
                ?>
        </body>
</html>

Вот как я собираю и запускаю образ:

$ sudo docker build -t website website/
$ sudo docker run -it --name website --network mynetwork  website:latest

Это журналы, когда я запускаю образ:

$ sudo docker run -it --name website --network mynetwork  website:latest

[Mon Feb 25 16:08:05.912611 2019] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.25 (Debian) PHP/7.0.33 configured -- resuming normal operations
[Mon Feb 25 16:08:05.912682 2019] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND'

1 Ответ

0 голосов
/ 25 февраля 2019

Вы подключаете свой контейнер к своей пользовательской сети mynetwork.Таким образом, вам нужно явно выставить порт 80->5000:

docker run -it --name website --network mynetwork  -p 5000:80 website:latest

. Таким образом, вы можете достичь контейнера в localhost:5000

Другой вариант - использовать режим network=host.В этом режиме вам не нужно (и на самом деле нельзя) выставлять порты, но вы жертвуете изоляцией контейнера, потому что контейнер использует сетевое соединение хоста.

docker run -it --name website --network=host website:latest

С этим вы можете достичь контейнера на localhost:80.Обратите внимание, что с помощью network=host вы не можете изменить исходный порт контейнера.

Оператор EXPOSE 5000 в вашем Dockerfile предназначен только для информации, а на самом деле не выполняет выставление порта :

Инструкция EXPOSE фактически не публикует порт.Он функционирует как тип документации между человеком, который создает образ, и человеком, который запускает контейнер, о том, какие порты предназначены для издателя

...