开发者问题收集

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

2019-04-26
4026

在 Windows 上成功设置 Docker 和 WSL(Ubuntu 18.04)后,我可以成功运行 Docker 并从 WSL 内部构建映像。我关注了 Nick Janetakis 的优秀文章 这里

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

守护进程的错误响应: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 内,也无法找到它。

据我所知,这不是其他博客/问题。

那么我如何让这个 dockerfile“看到” WSL 中的入口点文件(即它位于 WSL 中的容器中)?

注意

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

2个回答

您的 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
user3309314
2019-04-26

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

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

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

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

来自 docker-compose 文件: api: build: . 命令:puma -C config/puma.rb volumes: -.:/app

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

rmcsharry
2019-04-26