docker-compose 外部访问端口

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,以及通过 访问 Flower 监视器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

答案1

ports如果您省略,应该会以您想要的方式显示它network_mode。只是不要将其设置为hostnone。另外,请确保不是您的主机的防火墙阻止了访问。

端口映射与 network_mode: host 不兼容

从:https://docs.docker.com/compose/compose-file/

相关内容