获取 COPY 失败:尝试在 DigitalOcean Droplet 上的 Docker 中复制 package.json 文件时的统计信息
Getting COPY Failed: stat when trying to copy package.json file in Docker on DigitalOcean Droplet
我正在尝试从 DigitalOcean 中的 Docker 液滴创建一个 docker 容器。我正在尝试使用 Git 克隆到 运行 一个 Node.js 应用程序。
我收到错误 COPY failed: stat /var/lib/docker/tmp/docker-builder249248811/package.json: no such file or directory 我不知道为什么。我试过 运行 cd,试过改变 WORKdir,试过改变 COPY 中的路径。
我正在从我创建 docker 文件的 /root 文件夹中 运行ning 构建命令。
FROM node:12.18.3
#RUN mkdir /root/live \
# cd /root/live \
RUN git clone https://username:password@github.com/username/Portfolio.git
WORKDIR .
RUN cd /Portfolio
COPY package.json /Portfolio
COPY package-lock.json . /Portfolio
COPY . .
RUN npm install
EXPOSE 8080
CMD ["pm2", "start", "./bin/ww"]
COPY
从 Docker build context 复制文件(在 docker build
命令中命名的目录,通常是包含 Dockerfile) 到图像中。它不会复制图像中的文件。
您通常希望在 Docker 之外 运行 此 git clone
命令。这样做有几个原因:它可以让您将 Docker 文件签入存储库;它可以让你用你还没有提交的东西构建一个图像; Docker 图层缓存不会阻止您查看源存储库中的更改;您不希望您的 GitHub 凭据在 docker history
.
中以纯文本形式显示
我推荐这个(相当样板)Docker文件:
FROM node:12.18.3
# This also creates the directory if it doesn't exist.
# (This frequently is "/app".)
WORKDIR /Portfolio
# We ran `git clone` on the host outside of Docker.
# Copy in only the files we need to install dependencies.
COPY package*.json ./
RUN npm install
# Now copy in the rest of the application.
# (`node_modules` should be included in `.dockerignore`.)
COPY . ./
# RUN npm build
# Standard metadata to start the application.
EXPOSE 8080
CMD ["pm2", "start", "./bin/ww"]
# (Do you actually need a process manager inside a Docker container?)
# CMD ["node", "./bin/ww"]
您在这里遇到的另一个问题是每个 RUN
命令 运行 在其自己的隔离环境中;在每个 RUN
命令结束时,对当前工作目录或环境的更改都会丢失。您需要使用 WORKDIR
指令来更改目录,而不是 RUN cd ...
.
如果您想在 Docker 文件中坚持使用 运行ning git clone
,您需要将 WORKDIR
更改为签出的内容,但是一旦您完成此操作后,所有文件都在那里,您不需要 COPY
任何东西(或 RUN cp ...
在图像中移动它们)。
FROM node:12.18.3
WORKDIR /
# Remember, `docker history` will show this line exactly as here,
# including the credentials.
RUN git clone https://username:password@github.com/username/Portfolio.git
# Change directories into what got checked out.
WORKDIR /Portfolio
# All of the files are already there, so we only need to
RUN npm install
EXPOSE 8080
CMD ["pm2", "start", "./bin/ww"]
我正在尝试从 DigitalOcean 中的 Docker 液滴创建一个 docker 容器。我正在尝试使用 Git 克隆到 运行 一个 Node.js 应用程序。 我收到错误 COPY failed: stat /var/lib/docker/tmp/docker-builder249248811/package.json: no such file or directory 我不知道为什么。我试过 运行 cd,试过改变 WORKdir,试过改变 COPY 中的路径。 我正在从我创建 docker 文件的 /root 文件夹中 运行ning 构建命令。
FROM node:12.18.3
#RUN mkdir /root/live \
# cd /root/live \
RUN git clone https://username:password@github.com/username/Portfolio.git
WORKDIR .
RUN cd /Portfolio
COPY package.json /Portfolio
COPY package-lock.json . /Portfolio
COPY . .
RUN npm install
EXPOSE 8080
CMD ["pm2", "start", "./bin/ww"]
COPY
从 Docker build context 复制文件(在 docker build
命令中命名的目录,通常是包含 Dockerfile) 到图像中。它不会复制图像中的文件。
您通常希望在 Docker 之外 运行 此 git clone
命令。这样做有几个原因:它可以让您将 Docker 文件签入存储库;它可以让你用你还没有提交的东西构建一个图像; Docker 图层缓存不会阻止您查看源存储库中的更改;您不希望您的 GitHub 凭据在 docker history
.
我推荐这个(相当样板)Docker文件:
FROM node:12.18.3
# This also creates the directory if it doesn't exist.
# (This frequently is "/app".)
WORKDIR /Portfolio
# We ran `git clone` on the host outside of Docker.
# Copy in only the files we need to install dependencies.
COPY package*.json ./
RUN npm install
# Now copy in the rest of the application.
# (`node_modules` should be included in `.dockerignore`.)
COPY . ./
# RUN npm build
# Standard metadata to start the application.
EXPOSE 8080
CMD ["pm2", "start", "./bin/ww"]
# (Do you actually need a process manager inside a Docker container?)
# CMD ["node", "./bin/ww"]
您在这里遇到的另一个问题是每个 RUN
命令 运行 在其自己的隔离环境中;在每个 RUN
命令结束时,对当前工作目录或环境的更改都会丢失。您需要使用 WORKDIR
指令来更改目录,而不是 RUN cd ...
.
如果您想在 Docker 文件中坚持使用 运行ning git clone
,您需要将 WORKDIR
更改为签出的内容,但是一旦您完成此操作后,所有文件都在那里,您不需要 COPY
任何东西(或 RUN cp ...
在图像中移动它们)。
FROM node:12.18.3
WORKDIR /
# Remember, `docker history` will show this line exactly as here,
# including the credentials.
RUN git clone https://username:password@github.com/username/Portfolio.git
# Change directories into what got checked out.
WORKDIR /Portfolio
# All of the files are already there, so we only need to
RUN npm install
EXPOSE 8080
CMD ["pm2", "start", "./bin/ww"]