我有以下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