我是使用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:没有这样的文件或目录"
错误:在启动项目时遇到错误。
因此。遵循我的文件夹结构:
关注我的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。
有人可以帮我分别有人看到这个问题吗?
答案 0 :(得分:2)
问题在于您在dockerfile中使用的基本泊坞窗映像:
FROM java:7-jdk-alpine
您正在尝试通过运行run.sh
bash脚本来启动容器。但上面的图片并不支持bash
本身
作为参考,您可以在泊坞窗中心页面here中查看上面图像的文档。在这里引用必要的部分:
<强>的java:高山强>
...
为了最大限度地减少图像尺寸,其他相关工具并不常见 (例如git或 bash )将包含在基于Alpine的图像中。运用 将此图像作为基础,在您自己的Dockerfile中添加所需的内容 (有关如何安装的示例,请参阅alpine图像说明 如果您不熟悉,请打包。
关于这个问题。
现在,我可以想到两个解决方案:
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
*在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安装或配置本身。