Windows上的Docker和WSL Ubuntu无法找到docker-entrypoint.sh-找不到文件

时间:2019-04-26 08:29:27

标签: docker ubuntu windows-subsystem-for-linux

在Windows上成功设置Docker和WSL(Ubuntu 18.04)之后,我可以成功运行Docker并从WSL中构建映像。我关注了Nick Janetakis here

的精彩文章

但是,当我运行容器时,出现此错误:

来自守护程序的错误响应:OCI运行时创建失败:container_linux.go:344:启动容器进程导致“ exec:\” / bin / docker-entrypoint.sh \”:stat /bin/docker-entrypoint.sh:否这样的文件或目录”:未知

容器Dockerfile是这样的:

FROM ruby:2.4-alpine

RUN apk update && apk add build-base postgresql postgresql-dev git less make

RUN mkdir /app
WORKDIR /app
COPY Gemfile Gemfile.lock ./

RUN bundle install

# Clean up
RUN apk del build-base

COPY . /app/

EXPOSE 2999
EXPOSE 3000

ENTRYPOINT ["bin/docker-entrypoint.sh"]

因此,即使它在WSL的/ bin内部,也找不到入口点文件。

据我所知,这不是其他博客/问题中报告的Windows / unix CR / LF问题。

那么我如何使该dockerfile“看到” WSL中的入口点文件(即,它在WSL中的容器中)?

注意

如果我将最后一行更改为ENTRYPOINT [“ echo”,“ Hello”],则它会运行,但显然不会调用入口点脚本。我试图理解为什么它找不到该脚本,因为它在那里。

2 个答案:

答案 0 :(得分:1)

Dockerfile应该是这样的:

FROM ruby:2.4-alpine                                                                                                                                                                          

RUN apk update && apk add build-base postgresql postgresql-dev git less make                                                                                                                  

RUN mkdir /app                                                                                                                                                                                
WORKDIR /app                                                                                                                                                                                  
COPY Gemfile .                                                                                                                                                                  
COPY Gemfile.lock .

RUN bundle install                                                                                                                                                                            

# Clean up                                                                                                                                                                                    
RUN apk del build-base                                                                                                                                                                        

COPY . /app/                                                                                                                                                                                  

EXPOSE 2999                                                                                                                                                                                   
EXPOSE 3000                                                                                                                                                                                   

ENTRYPOINT ["/app/bin/docker-entrypoint.sh"] 

该点位于最后一行。您必须使用/app/bin/docker-entrypoint.sh

之类的绝对路径

已更新

这是docker-entrypoint.sh的示例:

#!/bin/ash

exec "${@}"

这是“整个”文件结构:

.
├── bin
│   └── docker-entrypoint.sh
├── Dockerfile
├── Gemfile
└── Gemfile.lock

答案 1 :(得分:0)

问题是docker-compose挂载驱动器不再可用。

这是因为我在本周早些时候重置了Windows密码,这导致Docker Desktop / Windows共享驱动器丢失。

由于我们正在使用docker-compose来安装应用程序的卷,因此无法再看到它,因为在Docker Dekstop中不再打开共享驱动器。

此: https://github.com/Microsoft/WSL/issues/1854#issuecomment-387778063

从docker-compose文件中: api:     建立:。     命令:puma -C config / puma.rb     数量:       -。:/ app

从docker-compose角度来看,该卷基本上是空的,因此找不到文件错误。