繁体   English   中英

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

[英]docker-compose up with volumes “no such file or directory”

我是使用docker的初学者,尤其是docker compose。 目前,在创建最初的简单docker环境时,遇到了第一个错误,我不知道为什么。 我试图在stackoverflow中寻找解决方案,但没有发现任何可以帮助我的东西。 使用“ docker-compose up”启动我的泊坞窗时,出现以下错误:

$ docker-compose up
删除errorinstance_app_1
重新创建8a358dfcb306_8a358dfcb306_8a358dfcb306_errorinstance_app_1 ...
正在重新创建8a358dfcb306_8a358dfcb306_8a358dfcb306_errorinstance_app_1 ...错误
错误:对于8a358dfcb306_8a358dfcb306_8a358dfcb306_errorinstance_app_1无法启动服务应用程序:oci运行时错误:container_linux.go:265:启动容器进程引起“ exec:\\” ./ run.sh \\“:统计信息。/run.sh:无此类文件或目录”
错误:对于应用程序无法启动服务应用程序:oci运行时错误:container_linux.go:265:启动容器进程导致“ exec:\\”。/run.sh \\”:stat ./run.sh:无此类文件或目录”
错误:启动项目时遇到错误。

所以。 按照我的文件夹结构:

  • 项目
    • docker-compose.yml
    • 码头工人
      • 爪哇
        • Docker文件
    • src
      • 运行

在我的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

运行

echo "Hello world."

是的,我知道我只能在docker-compose文件中执行该解决方案。 但是将来我需要扩展Dockerfile。

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

问题在于您在dockerfile中使用的基本docker映像:

FROM java:7-jdk-alpine

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

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

java:alpine

...

为了最大程度地减少图像大小,通常不会在基于Alpine的图像中包含其他相关工具(例如git或bash )。 以该映像为基础,在自己的Dockerfile中添加所需的内容(如果不熟悉,请参见高山映像说明以获取有关如何安装软件包的示例)。

那就是问题所在。

现在,我可以想到两种解决方案:

  1. 只需使用java:7-jdk作为基本映像,而不是java:7-jdk-alpine
  2. 通过将dockerfile更改为以下内容,将bash安装在基本映像java:7-jdk-alpine之上:

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

    *在高山Linux中安装bash的步骤的源代码在这里

看来docker compose找不到您的run.sh文件。 该文件需要包含在您的docker映像中。

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

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

重建映像docker-compose up再次运行docker-compose up

解决该问题的最简单方法是在容器中执行bash会话,然后在容器内部,如果文件不在路径中,则必须检查文件是否在指示的路径中存在,创建时必须将其包括在内将该图像放入docker文件或通过docker-compose内部的卷。

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

docker exec -it CONTAINER_NAME bash

我建议您在docker compose文件中创建一个卷,因为这是更简单的方法,也是最好的方法。

我想做一个问题,为什么将Dockerfile文件放在Java路径中?

遵循指南不是一个好主意正确的方法是将dockerfile文件放入环境文件夹,这种方式下dockerfile文件与应用程序的Java源代码无关

我收到了很多此错误,经过大量调查,看起来某些图像已损坏。

删除这些文件并重建即可解决问题。 这不是docker安装或配置本身。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM