Я клонировал этот проект:
https://github.com/andfanilo/vue-hello-world
и создал для него докер-файл:
FROM node:10
RUN apt install curl
# make the 'app' folder the current working directory
RUN mkdir /app
# copy project files and folders to the current working directory (i.e. 'app' folder)
COPY . /app
WORKDIR /app
RUN npm install
CMD [ "npm", "run", "serve" ]
Я создаю и запускаю его с:
FRONTEND_IMAGE='frontend-simple-image'
FRONTEND_CONTAINER_NAME='frontend-simple-container'
docker build -t ${FRONTEND_IMAGE} .
docker rm -f ${FRONTEND_CONTAINER_NAME}
docker run -it --name ${FRONTEND_CONTAINER_NAME} ${FRONTEND_IMAGE}
Он успешно собирается и работает:
И я могу получить к нему доступ в браузере своего хоста:
Это все хорошо, за исключением того, что я бы не ожидал, что я смогу получить доступ из своего хост-браузера в соответствии с:
https://docs.docker.com/config/containers/container-networking/
По умолчанию при создании контейнера он не публикует свои порты во внешнем мире. Чтобы сделать порт доступным для служб вне Docker или для контейнеров Docker, которые не подключены к сети контейнера, используйте флаг --publish или -p. Это создает правило брандмауэра, которое сопоставляет порт контейнера с портом на хосте Docker. Вот несколько примеров.
Так почему же это работает (доступ к веб-приложению из моего браузера) без добавления, например, -p 8080:8080
к docker run
??