这很奇怪。
我有这样的结构
app/
CLI/
someOtherFolder/
thingIwantToRun.py
tests.Dockerfile
Dockerfile
README.md
gunicorn.conf
这就是我的Dockerfile
的样子
FROM python:3.6
WORKDIR /app
COPY ./requirements.txt /.requirements.txt
# Install any needed packages specified in requirements.txt
RUN pip install -r /.requirements.txt
COPY gunicorn.conf /gunicorn.conf
COPY . /app
EXPOSE 8000
RUN ls
ENV FLASK_ENV=development
CMD ["python ./someOtherFolder/thingIwantToRun.py"]
这在启动容器时给我这个错误-
docker: Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused "exec: \"ls ./someOtherFolder\": stat ls ./someOtherFolder: no such file or directory": unknown.
当我将CMD
命令更改为其他不会失败的命令并且跳入容器时,我看到我的文件夹确实存在。
当我在Dockerfile中添加RUN ls
时,仍然可以看到我的文件夹。
如果存在,为什么我不能运行它?
更新-
如果我将thingIWantToRun.py
移到顶层文件夹并将Docker CMD
更改为
CMD [python thingIWantToRun.py]
我看到了同样的问题。但是,我可以将它放入容器中并验证文件是否在其中。
答案 0 :(得分:2)
问题是您如何运行CMD
命令。就像这样:
CMD ["executable", "param1", "param2"]
ref:https://docs.docker.com/engine/reference/builder/#cmd
从这种意义上说,实际命令应该是
CMD ["python", "./someOtherFolder/thingIwantToRun.py"]
Docker尝试找到executable
部分(数组的第一项)并运行它,并将其余的数组项(param1, param2
)传递给它。如果您更接近错误,则会显示
... process caused "exec: \"ls ./someOtherFolder\": stat ls ./someOtherFolder: no such file or directory"
它说ls ./someOtherFolder
不是文件或目录,它不能exec
!数组的第一项是可执行文件!
ls
应该是./someOtherFolder
命令数组的第一项,CMD
应该是数组的第二项。
答案 1 :(得分:0)
您需要使用CMD命令,如下所示:
CMD ["python", "./someOtherFolder/thingIwantToRun.py"]