AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 997306
Accepted
port5432
port5432
Asked: 2020-01-02 13:15:57 +0800 CST2020-01-02 13:15:57 +0800 CST 2020-01-02 13:15:57 +0800 CST

docker-compose 对外访问端口

  • 772

我确定这个问题之前已经回答过,但我在任何地方都找不到简单的解决方案。我有多个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
docker
  • 1 1 个回答
  • 1988 Views

1 个回答

  • Voted
  1. Best Answer
    Tarnay Kálmán
    2020-01-03T09:01:53+08:002020-01-03T09:01:53+08:00

    ports如果您遗漏,应该以您想要的方式公开它network_mode。只是不要将其设置为hostor none。此外,请确保它不是您主机的防火墙阻止访问。

    端口映射与 network_mode:host 不兼容

    来自:https ://docs.docker.com/compose/compose-file/

    • 1

相关问题

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve