python - testdriven.io django tdd - 运行 docker run 时出现错误:“$”不是有效的端口号
问题描述
每次我尝试运行命令
docker run --name django-tdd -e "PORT=8765" -p 8008:8765 registry.heroku.com/lit-sierra-68791/web:latest
我得到错误:'$' 不是有效的端口号
Dockerfile.prod
# pull official base image
FROM python:3.9.5-slim-buster
# set working directory
WORKDIR /usr/src/app
# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
ENV DEBUG 0
ENV SECRET_KEY fgerg345y4y56u5u5757jk5k56kuykykyk
ENV DJANGO_ALLOWED_HOSTS localhost 127.0.0.1 [::1]
ENV PORT 8765
# install system dependencies
RUN apt-get update \
&& apt-get -y install gcc postgresql \
&& apt-get clean
# add and install requirements
RUN pip install --upgrade pip
COPY ./requirements.txt .
RUN pip install -r requirements.txt
# add app
COPY . .
# add and run as non-root user
RUN adduser --disabled-password myuser
USER myuser
# run gunicorn
CMD gunicorn drf_project.wsgi:application --bind 0.0.0.0:$PORT
我什至在上面的文件中添加了 ENV PORT 8765,但它也没有用。
解决方案
ENV 变量不能在 CMD 中引用。
您可以通过创建一个读取变量并将其传递给 CMD 的脚本来解决此问题。
创建文件bin/start.sh
#!/bin/sh
gunicorn drf_project.wsgi:application --bind 0.0.0.0:$PORT
更新Dockerfile
...
CMD ["bin/start.sh"]
推荐阅读
- c++ - 第 5 行:字符 54:错误:没有匹配函数调用 'min(int, std::__cxx11::basic_string
::尺码类型)' - java - JWT,我们如何为 Java 和 NodeJS 使用相同的 RSA 密钥对
- javascript - 加法运算符在 Javascript 中不起作用。如果我做 20+10,它会给我 2010 而不是 30。我该如何解决这个问题?
- python - 如何使用 Alexa Skill Kit SDK 导入 Python 外部库?
- docker - Bazel - 在 Monorepo 中构建、推送、部署 Docker 容器到 Kubernetes
- reactjs - 在 Action Creators 中实例化一个新的 Howler 对象并在事件上调度操作
- go - 使用自定义 http.ResponseWriter 根据代理请求的响应编写 cookie?
- node.js - 无法使用 node v12.6 安装 probufJs
- git - 从标签推送 gitlab-ci 中获取“创建自”分支名称
- css - 使用一些组件我看到定义的索引类