docker工人组成卷“没有这样的文件或目录”

我是与docker工作的初学者,特别是docker工作者。 目前,创build我最初的简易docker环境,我遇到了第一个错误,我不知道为什么。 我试图在stackoverflowsearch解决scheme,但没有发现任何可以帮助我。 用“docker-compose up”启动我的docker我得到以下错误:

$ docker-compose up
删除errorinstance_app_1
重新创build8a358dfcb306_8a358dfcb306_8a358dfcb306_errorinstance_app_1 …
重新创build8a358dfcb306_8a358dfcb306_8a358dfcb306_errorinstance_app_1 …错误
错误:对于8a358dfcb306_8a358dfcb306_8a358dfcb306_errorinstance_app_1无法启动服务应用程序:oci运行时错误:container_linux.go:265:启动容器进程导致“exec:\”./ run.sh \“:stat ./run.sh:没有这样的文件或目录”
错误:对于应用程序无法启动服务应用程序:oci运行时错误:container_linux.go:265:启动容器进程导致“exec:\”./ run.sh \“:stat ./run.sh:没有这样的文件或目录”
错误:提出项目时遇到错误。

所以。 遵循我的文件夹结构:

  • 项目
    • 泊坞窗,compose.yml
    • docker
      • Java的
        • Dockerfile
    • SRC
      • run.sh

在我的docker-compose.yml之后:

version: '2' services: app: build: dockerfile: ./Docker/Java/Dockerfile context: . volumes: - ./src:/usr/local/etc/ working_dir: /usr/local/etc/ command: ./run.sh 

并遵循我的docker文件:

 FROM java:7-jdk-alpine # WORKDIR /usr/local/etc 

run.sh

 echo "Hello world." 

是的,我知道我只能在docker-compose文件中做这个解决scheme。 但是将来我需要扩展Dockerfile。

有人可以帮助我分别有没有人看到这个问题?

它看起来像泊坞窗撰写无法find你的run.sh文件。 这个文件需要包含在你的docker镜像中。

将Dockerfile更改为以下内容,然后使用docker build -t <YOUR_IMAGE_NAME> .重build映像docker build -t <YOUR_IMAGE_NAME> .

 FROM java:7-jdk-alpine ADD run.sh /usr/local/etc/run.sh 

一旦你的图像被重build,再次运行docker-compose up

解决这个问题最简单的方法是在容器中执行bash会话,然后在容器内部,如果文件不在path中,则必须检查指定path中是​​否存在文件,创build时必须包含该文件将图片导入到docker文件中,或者通过docker-compose里面的卷。

另一件要检查的是你正在使用的相对path。 当您检查docker容器中的文件时,将会很清楚

docker执行者 – 这个CONTAINER_NAME bash

我build议你在Docker撰写文件中创build一个卷,因为这是更简单的方法,也是最好的方法。

有一个问题,我想要做你,为什么你把Dockerfile文件放在一个Javapath中?

这不是一个好主意o遵循指南正确的方法是把你的dockerfile文件放到一个环境文件夹中,这样dockerfile文件就不会和你的应用程序的java源相关

我得到了这个错误很多,经过大量的调查,看起来像一些图像已损坏。

删除和重build解决了这个问题。 这不是docker安装或configuration本身。

问题是您在dockerfile中使用的基础泊坞窗图像:

 FROM java:7-jdk-alpine 

您正尝试通过运行run.sh bash脚本启动容器。 但是上面的图片不支持bash本身

作为参考,您可以在这里看到docker hub页面上面的图片的文档。 在这里引用必要的部分:

java的:高山

为了最大限度地减less图像尺寸,在Alpine图像中添加其他相关工具(如git或bash )并不常见。 使用这个图像作为基础,在你自己的Dockerfile中添加你需要的东西(如果你不熟悉的话,请参考高山图像描述,了解如何安装包的例子)。

这是关于这个问题。

现在,我可以想到2个解决scheme:

  1. 只需使用java:7-jdk作为基本映像而不是java:7-jdk-alpine
  2. 在基本映像java:7-jdk-alpine的顶部安装bash ,将dockerfile更改为:

     FROM java:7-jdk-alpine RUN apk update && apk upgrade && apk add bash #WORKDIR /usr/local/etc 

    *在高山linux安装bash步骤的来源在这里