Docker拒绝运行Bash



我有以下docker设置:

python27.dockerfile

FROM python:2.7
COPY ./entrypoint.sh /entrypoint.sh
RUN mkdir /src
RUN apt-get update && apt-get install -y bash libmysqlclient-dev python-pip build-essential && pip install virtualenv
ENTRYPOINT ["/entrypoint.sh"]
EXPOSE 8000
WORKDIR /src
CMD source /src/env/bin/activate && python /src/manage.py runserver

entrypoint.sh

#!/bin/bash
# some code here...
# some code here...
# some code here...
exec "$@"

每当我尝试运行Docker容器时,我都会得到python27 | /bin/sh: 1: source: not found

我知道错误是由于命令是用sh而不是bash运行的事实,但是我不明白为什么会发生这种情况,因为我在入口点的顶部有正确的Shebang。

有什么想法,为什么会发生?我该如何解决?

问题是,对于CMD,您使用的是使用/bin/sh的 shell form ,/src/env/bin/activate可能包含一个"源"命令,该命令在POSIX/bin/sh上不可用(等效的内置仅为.(。

您必须使用支架使用 exec表单用于CMD:

CMD ["/bin/bash", "-c", "source /src/env/bin/activate && python /src/manage.py runserver"]

更多详细信息:

  • https://docs.docker.com/engine/reference/builder/#run
  • https://docs.docker.com/engine/reference/builder/#cmd
  • https://docs.docker.com/engine/reference/builder/#entrypoint

最新更新