Как выставить образ докера nginx на порт, отличный от 80? - PullRequest
0 голосов
/ 16 января 2019

У меня .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.

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

Ответы [ 2 ]

0 голосов
/ 16 января 2019

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

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

version: "3"
services:
  service-name-one:
    image: yournginxOrSomethingelse
    ports:
      - "8080:80"
      - "8085:8081"
0 голосов
/ 16 января 2019

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

Dockerfile:

....
EXPOSE 80
....

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

docker run -d -p 8081:80 --name my-service my-service:latest
...