когда я выставляю порт в файле Docker и он успешно строится, но не отвечает на сервере - PullRequest
0 голосов
/ 14 июня 2019

Когда я запускаю эту команду docker build -t my_image.

Я получаю это как вывод:

Sending build context to Docker daemon  2.048kB
Step 1/5 : FROM php:7.2-apache
 ---> f046c4ead123
Step 2/5 : MAINTAINER JLT 7 <j*******t.******@gmail.com>
 ---> Using cache
 ---> 2d04942bf1f3
Step 3/5 : RUN apt-get update
 ---> Using cache
 ---> 8f5c190e13ab
Step 4/5 : CMD ["echo","Hello World!!!...My frst message"]
 ---> Using cache
 ---> 9d67b4f4cf85
Step 5/5 : EXPOSE 8090
 ---> Using cache
 ---> 7ad8354944b2
Successfully built 7ad8354944b2
Successfully tagged my_image:latest
SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.

Но когда я запускаю этот порт насервер не отвечает ...

1 Ответ

1 голос
/ 14 июня 2019

Инструкция EXPOSE Dockerfile сама по себе не публикует порты контейнера (см. Справочный раздел Dockerfile в документации ; инструкция только добавляет метаданные к созданному вами изображению и позволяет вам давать указание, какие порты прослушивает служба, работающая в вашем контейнере.

Инструкция EXPOSE является необязательной , и даже без настройки этого порта вы можете подключиться к порту, который прослушивает контейнер.

Чтобы сделать порт доступным;

  • сначала убедитесь, что служба в вашем контейнере прослушивает порт (ваш пример Dockerfile основан на официальном образе php:7.2-apache, который прослушивает порт 80 по умолчанию
  • убедитесь, что служба в вашем контейнере прослушивает любой IP-адрес (0.0.0.0), а не localhost / 127.0.0.1 (потому что localhost - это "localhost" внутри контейнера , что означает, что если ваша служба прослушивает localhost, она будет доступна только внутри самого контейнера)
  • когда работает контейнер, вы можете сопоставить порт контейнера с портом, к которому вы хотите, чтобы он был доступен («сопоставление портов») (также см. сетевой раздел в документации .

Опция -p / --publish имеет сокращение и расширенный синтаксис; Я буду использовать сокращенный синтаксис в моих примерах; эта запись использует формат: -p <host-port>:<container-port>

Например, если ваш контейнер прослушивает порт 80, и вы хотите опубликовать (или «сопоставить») этот порт с портом 8090 на вашем хосте;

docker run -d -p 8090:80 myimage

Ваш контейнер теперь может быть достигнут в:

  • http://<ip-address of your host>:8090
  • (в зависимости от настроек): http://localhost:8090
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...