Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash “docker用卷组成”;没有这样的文件或目录;_Bash_Docker_Docker Compose - Fatal编程技术网

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

Bash “docker用卷组成”;没有这样的文件或目录;,bash,docker,docker-compose,Bash,Docker,Docker Compose,我是docker特别是docker compose的初学者。目前,在创建我最初的easy docker环境时,我遇到了第一个错误,我不知道为什么。 我试图在stackoverflow中寻找解决方案,但没有找到任何可以帮助我的方法。 用“docker compose up”启动docker时出现以下错误: $docker组合起来 删除errorinstance_app_1 正在重新创建8a358dfcb306_8a358dfcb306_8a358dfcb306_errorinstance_应用程序

我是docker特别是docker compose的初学者。目前,在创建我最初的easy docker环境时,我遇到了第一个错误,我不知道为什么。 我试图在stackoverflow中寻找解决方案,但没有找到任何可以帮助我的方法。 用“docker compose up”启动docker时出现以下错误:

$docker组合起来
删除errorinstance_app_1
正在重新创建8a358dfcb306_8a358dfcb306_8a358dfcb306_errorinstance_应用程序1
正在重新创建8a358dfcb306_8a358dfcb306_8a358dfcb306_errorinstance_应用程序1。。。错误
错误:对于8a358dfcb306_8a358dfcb306_8a358dfcb306_errorinstance_app_1无法启动服务app:oci运行时错误:container\u linux.go:265:启动容器进程导致“exec:\”/run.sh\”:stat./run.sh:没有这样的文件或目录“
错误:for app无法启动服务app:oci运行时错误:container\u linux.go:265:启动容器进程导致“exec:\”/run.sh\”:stat./run.sh:没有这样的文件或目录“
错误:在启动项目时遇到错误

所以。以下是我的文件夹结构:

  • 项目
    • docker-compose.yml
    • 码头工人
      • Java
        • Dockerfile
    • src
      • run.sh
以下是my 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文件中解决这个问题。但将来我需要扩展Dockerfile


有人能分别帮助我吗?有人看到问题了吗?

docker compose似乎找不到您的
run.sh
文件。此文件需要包含在docker映像中

将docker文件更改为以下内容,然后使用
docker build-t.
重新生成映像

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

重建映像后,再次运行
docker compose up

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

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

docker exec-it容器名称bash

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

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

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

我经常遇到这个错误,经过大量调查,看起来有些图像已经损坏


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

问题在于docker文件中使用的基本docker映像:

FROM java:7-jdk-alpine
您正试图通过运行
run.sh
bash脚本来启动容器。但是上面的图片不支持
bash
本身

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

java:alpine

为了最小化图像大小,很少使用其他相关工具 (如git或bash)将包含在基于Alpine的图像中。使用 以此图像为基础,在自己的Dockerfile中添加所需的内容 (有关如何安装的示例,请参见alpine图像说明。) 如果您不熟悉,请选择套餐)。

这就是问题所在

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

  • 只需使用
    java:7-jdk
    作为基本映像,而不是
    java:7-jdk-alpine
  • 通过将dockerfile更改为:

    FROM java:7-jdk-alpine
    RUN apk update && apk upgrade && apk add bash
    #WORKDIR /usr/local/etc
    
    *在alpine linux中安装bash的步骤的来源是


  • 请更改命令:/bin/bash,然后检查该脚本是否存在于/usr/local/etc/目录中,以及它具有哪些权限?注释掉该命令,启动bash会话。一旦进入,你应该在你提到的工作目录上。。。另外,检查@Sergiu提到的执行权限更改命令时,我会得到一个“未找到”异常。将该命令直接放在Dockerfile“/bin/sh:bash:notfound”中。在docker compose文件“ERROR:for java无法启动服务应用程序:oci运行时错误:container\u linux.go:265:启动容器进程导致”exec:\“/bin/bash\”:stat/bin/bash:没有这样的文件或目录“。也只尝试了”bash““将CMD/bin/bash直接添加到dockerfile并运行docker run-it/bin/bash。它起作用了。但是为什么不能从docker compose文件运行th bin/bash命令呢?非常感谢您的帮助。有一个问题要问。我的理解是,docker compose中的“volumes”设置应该将文件映射到映像中,这样我就不需要添加任何文件了?docker compose
    volumes
    将文件映射到正在运行的容器(即在运行时容器正在运行),而不是映像。在docker compose配置中,您说“启动容器时运行
    Run.sh
    脚本”,但
    Run.sh
    不存在,因为它不是映像的一部分。需要在构建时添加
    run.sh
    文件。啊,好的。很高兴知道。因此,假设我有多个由run.sh触发的文件。我需要“添加”所有这些文件吗?你有“最佳实践”给我吗?我怎样才能以干净的方式处理?对于d