在我的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,它将创建项目…
当你使用执行列表时,比如……
CMD ["django-admin", "startproject", "$PROJECTNAME"]
...那么Docker将直接执行给定的命令,而不涉及shell。因为没有涉及到shell,这意味着:
无变量展开
没有通配符展开
没有i/o重定向与>,<,|等
通过command1没有多个命令;command2
等等。
如果你想让你的CMD展开变量,你需要安排一个shell。你可以这样做:
CMD ["sh", "-c", "django-admin startproject $PROJECTNAME"]
或者你可以使用一个简单的字符串来代替执行列表,这将得到与前面示例大致相同的结果:
CMD django-admin startproject $PROJECTNAME
假设你想在一个容器中启动一个java进程:
Dockerfile摘录示例:
ENV JAVA_OPTS -XX +UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -XX:MaxRAMFraction=1 -XshowSettings:vm
...
ENTRYPOINT ["/sbin/tini", "--", "entrypoint.sh"]
CMD ["java", "${JAVA_OPTS}", "-myargument=true"]
示例entrypoint.sh摘录:
#!/bin/sh
...
echo "*** Startup $0 suceeded now starting service using eval to expand CMD variables ***"
exec su-exec mytechuser $(eval echo "$@")