Docker 错误 - CommandError: "0.0.0.0:" 不是有效的端口号或地址:端口对

Abh*_*ari 3 python docker google-cloud-platform google-cloud-run

所以我有一个 docker 文件,我打算构建并推送到 Google Cloud Run,它看起来像这样:

# pull official base image
FROM python:3.7-slim

# set work directory
WORKDIR /usr/src/app

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# install dependencies
RUN pip install --upgrade pip
COPY ./requirements.txt /usr/src/app/requirements.txt
RUN pip install -r requirements.txt

# copy project
COPY . /usr/src/app/

CMD python manage.py runserver 0.0.0.0:$PORT
Run Code Online (Sandbox Code Playgroud)

这个想法是,一旦我将它推送到 Cloud Run,我的 Django 项目将在 0.0.0.0:$PORT 上运行,其中环境变量 $PORT 的值由 Google Cloud Run 自动设置。

我尝试在本地运行以下图像的容器,看看这是否有效。我将 $PORT 设置为 80,然后当我运行 docker 镜像的容器时,我得到以下信息:

"CommandError: "0.0.0.0:" is not a valid port number or address:port pair."
Run Code Online (Sandbox Code Playgroud)

查看其他答案,例如this

我知道 0.0.0.0 是给定机器的公共 IP 地址的占位符。我的问题是,为什么我在docker run [DockerImage]本地运行时没有收到“CommandError” ?

如果还有其他问题,请告诉我,我会澄清的。

编辑:我还想指出我正在关注本教程

Sha*_*k V 12

在主机上设置环境变量不会在容器内设置它。

该命令python manage.py runserver 0.0.0.0:$PORT正在$PORT未设置的容器内运行,因此它扩展为python manage.py runserver 0.0.0.0:.

尝试使用来自主机的值docker run -e PORT=$PORT <your_image>传递设置PORT容器内的env 变量。


pra*_*eep 6

您尚未PORT在 Dockerfile 中设置env 变量,这就是它$PORT在 CMD 执行期间无法解析的原因。

您可以按如下方式更新您的 Dockerfile(我以我8080为例,将其更新为所需的端口):

# pull official base image
FROM python:3.7-slim

# set work directory
WORKDIR /usr/src/app

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
ENV PORT 8080

# install dependencies
RUN pip install --upgrade pip
COPY ./requirements.txt /usr/src/app/requirements.txt
RUN pip install -r requirements.txt

# copy project
COPY . /usr/src/app/

CMD python manage.py runserver 0.0.0.0:$PORT
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助