Bash “docker用卷组成”;没有这样的文件或目录;
我是docker特别是docker compose的初学者。目前,在创建我最初的easy docker环境时,我遇到了第一个错误,我不知道为什么。 我试图在stackoverflow中寻找解决方案,但没有找到任何可以帮助我的方法。 用“docker compose up”启动docker时出现以下错误: $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_应用程序
删除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
- Java
- src
- run.sh
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
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