我试图为我的盖茨比应用程序构建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"]

当前回答

如果你在Windows中使用Docker,你需要在设置中禁用Docker引擎中的buildkit。它适用于我,解决了我的错误

将buildkit选项设置为false。

{
  "builder": {
    "gc": {
      "defaultKeepStorage": "20GB",
      "enabled": true
    }
  },
  "experimental": false,
  "features": {
    "buildkit": false
  }
}

其他回答

在我的例子中,我和dockerfile本身不在同一个目录中。

如果你有一个类似的项目结构,

├── docker
│   │
│   ├── app
│   │   └── Dockerfile
│   └── mlflow
│       └── Dockerfile
│
└── docker-compose.yml

你可能没有在docker-compose.yml中指定build: context:

version: '3'

services:

  mlflow:
    build:
      context: ./
      dockerfile: ./docker/mlflow/Dockerfile
    container_name: ml_app_mlflow
    volumes:
      - ./db:/db
    ports:
      - 5000:5000

在我的案例中,这是因为文档中的用例没有得到充分表达。几乎所有的例子都告诉你要使用。和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:对于同一个问题,这个主题确实有很多有趣的答案,但是是由许多奇异的原因引起的。我的问题只是一个显而易见的问题的旁注。

我在Mac上升级到最新的Docker Desktop版本后遇到了这个问题。通过对这个问题的评论解决了。

解决方案:不要使用buildkit,它适合我。

export DOCKER_BUILDKIT=0
export COMPOSE_DOCKER_CLI_BUILD=0

在我的例子中,我试图从我正在构建的Docker映像中的当前目录复制wp-content文件夹。像这样:

FROM wordpress:latest

# Copy wp-content
COPY ./wp-content/ ./var/www/html/wp-content/

但是,我注意到我有一个.dockerignore文件,它被明确告知忽略wp-content。

当我从.dockerignore中删除wp-content/时,它工作得很好。