Docker & Windows 上的 WSL Ubuntu 无法找到 docker-entrypoint.sh - 找不到文件
Docker & WSL Ubuntu on Windows cannot find docker-entrypoint.sh - file not found
在 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: 没有那个文件或目录": unknown
容器Docker文件是这样的:
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 中。
据我所知,这不是其他 blogs/questions.
中报告的 windows/unix CR/LF 问题
那么如何使这个 dockerfile 'see' 成为 WSL 中的入口点文件(即它在 WSL 的容器中)?
注意
如果我将最后一行更改为 ENTRYPOINT ["echo","Hello"] 那么它 运行s,但显然不会调用入口点脚本。我试图理解为什么找不到该脚本,因为它就在那里。
你 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 "${@}"
这里是 "whole" 文件结构:
.
├── bin
│ └── docker-entrypoint.sh
├── Dockerfile
├── Gemfile
└── Gemfile.lock
问题是 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
卷:
- .:/应用
从docker-compose 的角度来看,卷基本上是空的,因此找不到文件错误。
在 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: 没有那个文件或目录": unknown
容器Docker文件是这样的:
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 中。
据我所知,这不是其他 blogs/questions.
中报告的 windows/unix CR/LF 问题那么如何使这个 dockerfile 'see' 成为 WSL 中的入口点文件(即它在 WSL 的容器中)?
注意
如果我将最后一行更改为 ENTRYPOINT ["echo","Hello"] 那么它 运行s,但显然不会调用入口点脚本。我试图理解为什么找不到该脚本,因为它就在那里。
你 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 "${@}"
这里是 "whole" 文件结构:
.
├── bin
│ └── docker-entrypoint.sh
├── Dockerfile
├── Gemfile
└── Gemfile.lock
问题是 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 卷: - .:/应用
从docker-compose 的角度来看,卷基本上是空的,因此找不到文件错误。