【发布时间】:2021-01-26 05:08:46
【问题描述】:
我有一个 docker-compose.yml 文件如下:
version: "3.9"
services:
server:
build: .
ports:
- "8086"
environment:
- PORT=8086
一个码头文件:
FROM python:3.8
RUN python -m pip install --upgrade pip
RUN pip install pipenv
COPY Pipfile* /app/
RUN cd /app && pipenv lock --keep-outdated --requirements > requirements.txt
RUN pip install -r /app/requirements.txt
COPY . /app/src
WORKDIR /app/src
EXPOSE ${PORT}
CMD uwsgi --http :${PORT} --wsgi-file server.py --callable main
所以基本上,我在给定端口上运行服务器,我在 Dockerfile 和 docker-compose 中公开了该端口。但是,当我运行这些容器的两个实例时,我需要一种方法让它们各自使用自己的端口。我也不能硬编码值,因为我需要能够扩展到 n 个实例。因此,我需要以某种方式从正在运行的容器中获取每个端口,将其公开,然后在该端口上运行服务器,而不是使用环境变量 PORT。
当我调用docker-compose up --scale server=2 来运行两个服务器容器时,我无法发送 HTTP 请求,因为端口映射不匹配。
基本上我要做的是让每个容器使用 docker-compose 分配给它的端口运行 uwsgi。有什么方法可以很好地实现这一点吗?
【问题讨论】:
标签: python docker docker-compose uwsgi