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

标签 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"] 那么它会运行,但显然不会调用入口点脚本。我试图理解为什么它找不到那个脚本,因为它就在那里。

最佳答案

你就是这样 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

关于Windows 上的 Docker 和 WSL Ubuntu 找不到 docker-entrypoint.sh - 找不到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55863683/

相关文章:

shell - Ubuntu如何创建执行命令的快捷方式

java - 如何使用进程构建器运行 .sh 文件?

flutter - 使用 VSCode 和 WSL2 开发 Flutter

visual-studio-code - 无法从命令环境 cd 开始调试意外的 gdb 输出

php - Laravel应用HTTP请求到同一Nginx Docker容器上的本地API

go - 加速 golang vendor 的 docker 构建

Wordpress 插件安装 - 无法连接到 FTP 服务器 - 最安全的解决方案?

regex - 如何用逗号替换文本 [Windows 上的 Linux]

docker - 如何自动删除旧的 Docker 镜像?

maven - Dockerize 一个多 Maven 项目(不是多模块)