我确定这个问题之前已经回答过,但我在任何地方都找不到简单的解决方案。我有多个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
ornone
。此外,请确保它不是您主机的防火墙阻止访问。来自:https ://docs.docker.com/compose/compose-file/