[英]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之后:
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中添加所需的内容(如果不熟悉,请参见高山映像说明以获取有关如何安装软件包的示例)。
那就是问题所在。
现在,我可以想到两种解决方案:
java:7-jdk
作为基本映像,而不是java:7-jdk-alpine
通过将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.