一尘不染

如何在Dockerfile CMD中使用变量?

docker

在我的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,它将创建项目…


阅读 1399

收藏
2020-06-17

共1个答案

一尘不染

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

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

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

  • 无变量扩展
  • 没有通配符扩展
  • 没有I / O重定向功能><|
  • 没有多个命令通过 command1; command2
  • 依此类推。

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

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

或者,您可以使用简单的字符串而不是执行列表,这将使您得到的结果与前面的示例大致相同:

CMD django-admin startproject $PROJECTNAME
2020-06-17