我的Dockerfile结尾:
ENTRYPOINT ["ls /etc"]
终端:
...Rest of the building above is fine
Step 8/8 : ENTRYPOINT ["ls /etc"]
---> Using cache
---> ea1f33b8ab22
Successfully built ea1f33b8ab22
Successfully tagged redis:latest
k@Karls ~/dev/docker_redis (master) $ docker run -d -p 6379:6379 --name red redis
71d75058b94f088ef872b08a115bc12cece288b53fe26d67960fe139953ed5c4
docker: Error response from daemon: OCI runtime create failed: container_linux.go:296: starting container process caused "exec: \"ls /etc\": stat ls /etc: no such file or directory": unknown.
由于某种原因,它找不到目录/etc
。我做了一个pwd
,当前的工作目录是/
。我还在入口点上做了ls /
,显示/etc
目录很好。
答案 0 :(得分:7)
OCI运行时创建失败:container_linux.go:296
根据我的经验,这是docker守护程序本身的错误,而不是您尝试运行的容器。尝试删除所有容器,重新启动守护程序。我想我们还必须清理码头网络。
答案 1 :(得分:3)
我似乎遇到了同样的问题。这就是我在做的事情。
Dockerfile
FROM gcc:7.2.0
COPY src/ /usr/src/myapp
WORKDIR /usr/src/myapp
RUN set -x gcc -o myapp main.c
CMD ["./myapp"]
构建
$ docker build -t test .
Sending build context to Docker daemon 3.584kB
Step 1/6 : FROM gcc:7.2.0
...
---> 3ec35c7d2396
Successfully built 3ec35c7d2396
Successfully tagged test:latest
SECURITY WARNING: You are building a Docker image from Windows against a
non-Windows Docker host. All files and directories added to build context
will have '-rwxr-xr-x' permissions. It is recommended to double check and
reset permissions for sensitive files and directories.
运行
$ docker run -it test
D:\Docker Toolbox\docker.exe: Error response from daemon: OCI runtime create
failed: container_linux.go:296: starting container process caused "exec:
\"./myapp\": stat ./myapp: no such file or directory": unknown.
将CMD更改为ENTRYPOINT并删除了set -x似乎解决了问题。虽然我们仍然不确定原因是什么,或者这对你也有用。 确保/ etc存在或创建为main.c未编译。
Dockerfile
FROM gcc:7.2.0
COPY src/ /usr/src/myapp
WORKDIR /usr/src/myapp
RUN gcc -o myapp main.c
ENTRYPOINT ["./myapp"]
答案 2 :(得分:2)
On OSX, I fixed it by clearing the volume data manually. Close docker, and remove everything in ~/Library/Containers/com.docker.docker
答案 3 :(得分:1)
更新Windows凭据后,我也遇到了相同的问题,请尝试以下操作:Docker设置>共享驱动器>重置凭据>再次选择驱动器>应用并重新输入凭据。这多次为我解决了问题
答案 4 :(得分:0)
您要在容器内执行的命令不存在。在这种情况下,图像中不存在ls /etc
。有一个/bin/ls
二进制文件,但没有一个/bin/"ls /etc"
二进制文件,它本身将是无效的,因为文件系统上的文件名不能包含/
,尽管它可以包含空格。 / p>
当然,您要运行的是带有参数ls
的{{1}},为此,如果使用exec语法运行,则需要分隔每个参数。
/etc
或者,如果您想让Shell解析字符串,就像在命令行上运行ENTRYPOINT ["ls", "/etc"]
的容器中出现bash提示符一样,然后切换到运行Shell的字符串语法:
ls /etc