Docker 错误 - CommandError:“0.0.0.0:”不是有效的端口号或地址:端口对
Posted
技术标签:
【中文标题】Docker 错误 - CommandError:“0.0.0.0:”不是有效的端口号或地址:端口对【英文标题】:Docker Error - CommandError: "0.0.0.0:" is not a valid port number or address:port pair 【发布时间】:2020-05-08 14:42:24 【问题描述】:所以我有一个 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
这个想法是,一旦我将它推送到 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."
查看其他答案,例如this。
我了解 0.0.0.0 是给定机器的公共 IP 地址的占位符。我的问题是,为什么我在本地运行docker run [DockerImage]
时没有收到“CommandError”??
如果还有其他问题,请告诉我,我会澄清的。
编辑: 我还想指出我在关注this tutorial
【问题讨论】:
$PORT 没有设置在它被扩展的地方。因此,要么它在处理 Dockerfile 时被 docker 扩展(阅读 CMD 的文档),要么 Cloud Run 没有像你说的那样设置它。 只是为了仔细检查,您是否在本地计算机上设置了 $PORT 环境变量?在 Cloud Run 上它是自动设置的,但对于本地执行,您必须自己设置。 @LundinCast 是的,我已经在本地设置了它,但它不在 Dockerfile 中! 你说0.0.0.0 is a placeholder for the public IP address
。这是错误的。 IP 地址0.0.0.0
是一种约定,表示侦听所有 IPv4 网络接口。如果系统有多个 IPv4 网络接口,则此约定意味着侦听每个网络接口。请注意,此约定仅适用于创建侦听套接字(等待入站连接尝试)而不适用于出站连接。
【参考方案1】:
在宿主机上设置环境变量不会在容器内设置。
命令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
环境变量设置为来自主机的值。
【讨论】:
【参考方案2】:您没有在 Dockerfile 中设置 PORT
环境变量,这就是它在 CMD 执行期间无法解析 $PORT
的原因。
您可以按如下方式更新您的 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
希望对你有帮助
【讨论】:
您好,感谢您的回复,我会选择此作为最佳答案,但上面的人已经工作了。不过谢谢 - 我认为这对未来的人们来说是一个很好的参考。以上是关于Docker 错误 - CommandError:“0.0.0.0:”不是有效的端口号或地址:端口对的主要内容,如果未能解决你的问题,请参考以下文章
CommandError:找不到xgettext。 Django的
CommandError:您似乎没有安装“psql”程序或在您的路径上
无法运行镜像,CMD ["npm", "start"] 命令错误
Redis常见报错之 Redis::CommandError (MISCONF Redis is configured to save RDB snapshots, but it is current