Как выставить образ докера nginx на порт, отличный от 80?

У меня есть .Dockerfile (из источника):

# build stage
FROM node:9.11.1-alpine as build-stage
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

# production stage
FROM nginx:1.13.12-alpine as production-stage
COPY --from=build-stage /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

Где в конце приложение получает доступ к порту 80. Затем у меня есть еще один другой .Dockerfile, и для их создания я использую следующий файл docker-compose.yml:

version: "3"
services:
  service-name-one:
    image: dockerImageFromAbove
    ports:
      - "8080:80"
  service-name-two:
    image: someOtherImage
    ports:
      - "3000:3001"

И это пример, который действительно работает. Но мне нужно было бы изменить порт с образа докера nginx, а вместо порта 80 мне нужно было бы иметь порт 8081. Просто изменив это в обоих файлах сверху, это не работает, и в своем исследовании я обнаружил, что единственный рабочий пример при открытии порта 80 из nginx. Я попытался заменить строку

EXPOSE 8081

с участием

RUN -P 80:8081
EXPOSE 8081

но похоже, что флаг -P здесь не поддерживается. Итак, как я могу сделать такое сопоставление, прежде чем выставлять nginx на порт 80?

Я нашел этот пост, но не могу выяснить, как использовать ответы в моих файлах докеров.

Я также нашел это сообщение (часть для переменных среды), но также не уверен, как интегрировать это с моим файлом docker-compose.


person delux    schedule 15.01.2019    source источник
comment
Зачем вам нужно менять номер порта на стороне Docker? Какую конфигурацию вы надеетесь получить в итоге?   -  person David Maze    schedule 16.01.2019
comment
Вы обновили файл конфигурации nginx в /etc/nginx/conf.d/default.conf? Вероятно, он прослушивает только порт 80.   -  person Joel Magnuson    schedule 16.01.2019
comment
Однако я не понимаю, почему вам нужно изменить порт контейнера. Вы пытаетесь привязаться к 8081 на хосте вместо 8080, или вы хотите, чтобы контейнер был на 8081 вместо 80?   -  person Joel Magnuson    schedule 16.01.2019
comment
@JoelMagnuson, когда мое приложение VueJS прослушивает порт 8081 и выполняет промежуточное развертывание (режим разработки), это порт, который мне нужно сопоставить. .Dockerfile сверху предназначен для развертывания (в рабочем режиме) для производства. Я хотел бы сохранить один и тот же файл docker-compose.yml для обоих случаев развертывания, и я не хочу менять внутренний порт 8081 в приложении, что оставляет сценарий для изменения порта в образе докера. .   -  person delux    schedule 16.01.2019
comment
@DavidMaze, пожалуйста, смотрите мой комментарий сверху   -  person delux    schedule 16.01.2019


Ответы (2)


Второй файл - это не Dockerfile, а docker-compose.yml, вам нужно изменить в docker-compose.yml порты, и все будет в порядке. Параметр -p "hostport:containerport" предоставляет порт при использовании команды docker run. В любом случае, я предлагаю вам использовать поддерживаемый и официальный образ, прежде чем слишком сильно менять изображение в файле докеров.

В любом случае, если вам действительно нужен 8081, попробуйте что-то вроде этого

version: "3"
services:
  service-name-one:
    image: yournginxOrSomethingelse
    ports:
      - "8080:80"
      - "8085:8081"
person Mirco    schedule 16.01.2019

Я считаю, что -P должен быть в нижнем регистре: -p (это для команды командной строки, а не Dockerfile) Синтаксис:

Докерфайл:

....
EXPOSE 80
....

Командная строка:

docker run -d -p 8081:80 --name my-service my-service:latest
person MikeBFromPDX    schedule 15.01.2019