Dockerfile找不到复制的文件夹

时间:2019-04-10 08:36:29

标签: docker

这很奇怪。

我有这样的结构

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]

我看到了同样的问题。但是,我可以将它放入容器中并验证文件是否在其中。

2 个答案:

答案 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"]