Сопоставление портов в Compute Engine с Docker - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть образ докера, работающий на Google Compute Engine.Образ содержит приложение Spring Boot, работающее на порту 9000.

Это выставлено на http://<ip>:9000, и я могу получить доступ без проблем.Я пытаюсь настроить доступный порт на 80, чтобы настроить запись DNS так, чтобы она указывала только на IP-адрес.

Мой вопрос заключается в том, как этого добиться, поскольку документация оставила меня в замешательстве.Я использую онлайн-консоль GCP (веб-интерфейс) для развертывания, и нет поля для указания команды docker run -p 9000:80, которая решит мою проблему (если есть, исправьте меня).

Так что мне нужнопереназначить порт в настройках Spring Boot?Или внутри контейнера Docker?Или я предполагаю настроить некоторые правила пересылки в GCP?Спасибо за разъяснения!

Мой DOCKER файл выглядит следующим образом:

FROM gcr.io/distroless/java
VOLUME /tmp
ADD build/libs/*.jar app.jar
ENV JAVA_OPTS=""
ENTRYPOINT ["java","-jar","app.jar"]

Я использую ОС, оптимизированную для контейнеров, из GCP.

Ответы [ 3 ]

0 голосов
/ 12 сентября 2018

Вместо этого используйте гибкую среду App Engine с настраиваемой средой выполнения.Гибкая среда App Engine специально разработана для запуска контейнеров на Compute Engine.Все, что вам нужно сделать, это убедиться, что ваше приложение Spring Boot прослушивает порт 8080, а Dockerfile включает строку «EXPOSE 8080».См. документацию по пользовательским средам выполнения .

0 голосов
/ 07 ноября 2018

Я решил свою проблему, сопоставив порт Spring Boot с портом 80 в производственном профиле.

Это позволяет мне сопоставить записи DNS с необработанным IP-адресом без необходимости какой-либо дополнительной настройки.

0 голосов
/ 11 сентября 2018

Вы захотите настроить обратный прокси-сервер (например, nginx) в том же контейнере, который будет перенаправлять прокси с порта 80 на порт 9000. После настройки необходимо открыть брандмауэр до порта 80 и закрыть брандмауэр на 9000 /. где еще.

Вам нужно будет изменить свое изображение, чтобы точка входа представляла собой созданный вами скрипт, который запускает как прокси, так и ваш процесс Java. Если какой-либо процесс завершится неудачно, ваш скрипт должен умереть, а значит и ваш контейнер. Когда ваш контейнер умирает, оптимизированная для контейнера ОС перезапустит его.

В качестве наброска ROUGH (вам нужно будет провести исследование nginx):

Dockerfile

.... whatever ....
COPY nginx.conf /etc/nginx/nginx.conf
COPY startup.sh .
RUN chmod 777 startup.sh
ENTRYPOINT ./startup.sh

startup.sh

(см. здесь -n опция требует> = bash 4.3)

#! /bin/bash

{ nginx; } &
{ java -jar app.jar; } &
wait -n
pkill -P $$

nginx.conf

daemon off;

http {

  server {
    listen 80;
    server_name _;

    location / {
      proxy_pass http:localhost:9000;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
    }
  }
}

Редактировать

Добавлена ​​строка daemon off; в вышеупомянутый файл nginx.conf, чтобы nginx не демонизировался. Это позволяет запускать скрипт запуска при остановке nginx.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...