我试图为我的盖茨比应用程序构建Docker映像。每当我运行命令docker构建。-t gatsbyapp,它会给出一个错误:
failed to solve with frontend dockerfile.v0: failed to build LLB:
failed to compute cache key: "/.env" not found: not found
同时我的Dockerfile如下所示:
FROM node:13
WORKDIR /app
COPY package.json .
RUN yarn global add gatsby-cli
RUN yarn install
COPY gatsby-config.js .
COPY .env .
EXPOSE 8000
CMD ["gatsby","develop","-H","0.0.0.0"]
我在使用WSL2 Ubuntu时遇到了这个问题,我通过更改Dockerfile的权限来解决它。
当我在我的电脑上设置WSL2时,我直接将我的一些文件(包括Dockerfile)从Windows复制到Ubuntu根文件夹中,这显然导致文件权限为空:
---------- 1 user user 10M Jan 1 00:00 Dockerfile
为了解决这个问题,我运行chmod 644 Dockerfile:
-rw-r--r-- 1 user user 10M Jan 1 00:00 Dockerfile
在那之后,Docker能够构建图像而没有任何进一步的问题。
对我来说,以下是错误:
无法用前端dockerfile解决。v0: failed to create LLB definition: failed to do request: Head https://registry-1.docker.io/v2/library/postgres/manifests/13-alpine: net/http: TLS握手超时
我在Windows 10和Docker Desktop中使用WSL2,我在更新Docker Desktop到3.5版本后得到了这个问题。
我通过启用与其他发行版的WSL集成来解决这个问题。
启用它:
在Windows中打开Docker Desktop,进入设置→资源→WSL集成→启用与其他发行版的集成,并为您安装的Ubuntu应用程序启用它。
在我的案例中,这是因为文档中的用例没有得到充分表达。几乎所有的例子都告诉你要使用。和Dockerfile(大写D),但它们大多没有明确地告诉如何定制。
docker image build --tag any_image_tag --file any_file_name path_to_your_context_folder
我认为这个更好,我希望它能帮助到那些来这里的人。Any_file_name实际上是包含构建指令的任何文件名。其中的“dockerfile”是不需要的,但如果它与上下文文件夹不同,它有助于识别并给出完整的路径。Path_to_your_context_folder基本上是你的工作所在的文件夹,比如一个web应用程序。
例如,下面是我当前在COPY窗口中的测试。/app使用context文件夹作为。:
docker image build --tag nested_image --file C:\WorkSpace\myapp\dockerfiles\any_file_name C:\WorkSpace\myapp\contextfiles\
PS:对于同一个问题,这个主题确实有很多有趣的答案,但是是由许多奇异的原因引起的。我的问题只是一个显而易见的问题的旁注。