在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
问题是无法再访问docker-compose mount驱动器。
这是因为我本周早些时候重置了我的Windows密码,导致Docker Desktop / Windows Shared Drive丢失。
由于我们使用docker-compose为应用程序安装卷,因此无法再看到它,因为Docker Dekstop中不再打开共享驱动器。
这个:https://github.com/Microsoft/WSL/issues/1854#issuecomment-387778063
来自docker-compose文件:api:build :.命令:puma -C config / puma.rb卷: - 。:/ app
从docker-compose的角度来看,卷基本上是空的,因此找不到文件错误。