docker-compose up with volumes" no such file or directory"

时间:2017-10-13 14:05:38

标签: bash docker docker-compose

我是使用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 \":stat ./run。 sh:没有这样的文件或目录"
  错误:for app无法启动服务app:oci运行时错误:container_linux.go:265:启动容器进程导致" exec:\" ./ run.sh \":stat ./run。 sh:没有这样的文件或目录"
  错误:在启动项目时遇到错误。

因此。遵循我的文件夹结构:

  • 项目
    • 搬运工-compose.yml
    • 泊坞
      • 爪哇
        • 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

关注我的泊坞文件:

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

run.sh

echo "Hello world."

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

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

4 个答案:

答案 0 :(得分:2)

问题在于您在dockerfile中使用的基本泊坞窗映像:

FROM java:7-jdk-alpine

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

作为参考,您可以在泊坞窗中心页面here中查看上面图像的文档。在这里引用必要的部分:

  

<强>的java:高山

     

...

     

为了最大限度地减少图像尺寸,其他相关工具并不常见   (例如git或 bash )将包含在基于Alpine的图像中。运用   将此图像作为基础,在您自己的Dockerfile中添加所需的内容   (有关如何安装的示例,请参阅alpine图像说明   如果您不熟悉,请打包。

关于这个问题。

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

  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
    

    *在alpine linux中安装bash的步骤来源是here

答案 1 :(得分:0)

看起来docker compose无法找到您的run.sh文件。此文件需要包含在docker镜像中。

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

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

重建图片后,再次运行docker-compose up

答案 2 :(得分:0)

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

要检查的另一件事是您使用的相对路径。当您检查de docker容器

中是否存在文件时,将会很清楚

docker exec -it CONTAINER_NAME bash

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

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

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

答案 3 :(得分:0)

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

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