Docker несколько портов (внешний и внутренний) не работают - PullRequest
1 голос
/ 29 мая 2020

Я новичок в Docker и CI, поэтому, пожалуйста, не жмите меня :)

Я использую Linode, и я хотел бы запустить интерфейс (реагировать) и бэкэнд ( python) на том же сервере. Оба будут на разных портах, если вы не скажете мне, что это неправильный подход.

Теперь я запускаю Jenkins на порту 8081 и выполняю два отдельных задания:

Backend Jenkins :

IMAGE = "my_docker_flask:latest"
image = docker.build("${IMAGE}");
def container = image.run('-p 5000:5000')
def contport = container.port(5000)

Backend Dockerfile (flask):

FROM python:2.7
WORKDIR app
COPY . .
RUN pip install -r requirements.txt
ENTRYPOINT ["python"]
CMD ["app.py"]

Frontend Jenkins:

IMAGE = "reactapp"
image = docker.build("${IMAGE}")
def container = image.run('-p 6000:6000')
def contport = container.port(6000)

Frontend Dockerfile:

FROM nginx
COPY build /var/www

Серверная часть работает нормально, когда я открываю свой IP-адрес Linode с портом 5000, но 6000 не работает. Я даже пробовал с 3333, но это тоже не работает и.

Вот мой docker ps -a:

reactapp  "nginx -g 'daemon of…"   41 seconds ago      Up 40 seconds       80/tcp, 0.0.0.0:6000->6000/tcp
reactapp  "nginx -g 'daemon of…"   2 days ago          Up 2 days           80/tcp, 0.0.0.0:3333->3333/tcp
my_docker_flask:latest   "python app.py"   2 days ago          Up 2 days           0.0.0.0:5000->5000/tcp

Пожалуйста, помогите мне?

Как я могу запустить несколько приложений на разных портах, используя один и тот же IP-адрес?

EDIT

Я исправил это, но изменил его на следующее:

COPY build /usr/share/nginx/html

и

def container = image.run('-p 5000:80')

1 Ответ

0 голосов
/ 29 мая 2020
80/tcp, 0.0.0.0:6000->6000/tcp

Если внимательно посмотреть на это, мы можем узнать, что ваша служба reactapp обслуживается через порт 80 внутри контейнера. Но вы пытаетесь сопоставить порт 6000 в контейнере с портом 6000 снаружи. Конечно, вы не сможете получить доступ к службе, где она вообще не обслуживается.

Кроме того, This site can’t be reached - ERR_UNSAFE_PORT вызван тем, что вы используете порт 6000, который ограничен Chrome браузер.

Решение:

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