在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”],则它会运行,但显然不会调用入口点脚本。我试图理解为什么它找不到该脚本,因为它在那里。
答案 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角度来看,该卷基本上是空的,因此找不到文件错误。