小编典典

如何在 Dockerfile CMD 中使用变量?

all

在我的 Dockerfile 中:

ENV PROJECTNAME mytestwebsite
CMD ["django-admin", "startproject", "$PROJECTNAME"]

错误:

CommandError: '$PROJECTNAME' is not a valid project name

这里最快的解决方法是什么?Docker 是否有计划在更高版本的 Docker 中“修复”或引入此功能?

注意:如果我从 Docker 文件中删除 CMD 行,然后运行 ​​Docker 容器,我可以从容器内部手动运行 Django-admin
startproject $PROJECTNAME ,它将创建项目…


阅读 215

收藏
2022-07-07

共1个答案

小编典典

当您使用执行列表时,如…

CMD ["django-admin", "startproject", "$PROJECTNAME"]

…然后 Docker 将直接 执行给定的命令,而不涉及 shell。由于不涉及外壳,这意味着:

  • 无变量扩展
  • 没有通配符扩展
  • >没有使用, <,|等的 i/o 重定向
  • 没有多个命令通过command1; command2
  • 等等。

如果要CMD扩展变量,则需要安排一个外壳。你可以这样做:

CMD ["sh", "-c", "django-admin startproject $PROJECTNAME"]

或者你可以使用一个简单的字符串而不是一个执行列表,它得到的结果与前面的例子大致相同:

CMD django-admin startproject $PROJECTNAME
2022-07-07