Назад | Перейти на главную страницу

docker-compose порты доступа извне

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

Я хотел бы получить доступ к Flask API извне сервера, но не могу понять, как это сделать. Вроде есть вариант при запуске docker-compose run -p, но я понимал, что docker-compose up -d - это предпочтительный и надежный способ запуска compose.

Я пытался изменить network_mode: "bridge" к network_mode: "host", но это не помогло.

Допустим, IP-адрес хоста - 123.23.23.111, я хотел бы получить доступ к api обслуживание извне через что-то вроде http://123.23.23.111:5004, а также Цветочный монитор через http://123.23.23.111:5559.

Все это работает в частной сети, и я хотел бы, чтобы другой сервер в частной сети имел доступ к API, но доступ в Интернет не требуется. https будет добавлен позже.

version: '3.7'
services:
  api:
    build:
      context: ./
      dockerfile: ./api/Dockerfile
    restart: always
    ports:
     - "5004:5000"
    network_mode: "host"
    depends_on:
      - redis
  worker:
    user: nobody
    build:
      context: ./
      dockerfile: ./worker/Dockerfile
    depends_on:
      - redis
  monitor:
    build:
      context: ./
      dockerfile: ./monitor/Dockerfile
    ports:
     - "5559:5555"
    network_mode: "host"
    entrypoint: flower
    command: --port=5555 --broker=redis://redis:6379/0
    depends_on:
      - redis
  redis:
    image: redis

Dockerfile в api/Dockerfile

FROM python:3.6-alpine

ENV CELERY_BROKER_URL redis://redis:6379/0
ENV CELERY_RESULT_BACKEND redis://redis:6379/0

ENV HOST 0.0.0.0
ENV DEBUG true

COPY ./api/requirements.txt /api/requirements.txt
COPY .env /api
WORKDIR /api

# install requirements
RUN pip install -r requirements.txt

# expose the app port
EXPOSE 5001

RUN pip install gunicorn

COPY ./api/app.py /api/app.py
COPY ./api/worker.py /api/worker.py

# run the app server
CMD ["gunicorn", "--bind", "0.0.0.0:5000", "--workers", "3", "app:app"]

Также интересно:

sudo docker network ls
NETWORK ID          NAME                          DRIVER              SCOPE
eb03130b85ea        bridge                        bridge              local
15f8a2e5cd21        host                          host                local
d80f015461c3        myapp_default                 bridge              local
0dd1b3ace731        none                          null                local

ports должен выставить его так, как вы хотите, если вы уйдете network_mode вне. Просто не устанавливай это на host или none. Также убедитесь, что доступ не блокирует брандмауэр вашего хоста.

Сопоставление портов несовместимо с network_mode: host

Из: https://docs.docker.com/compose/compose-file/