AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 666149
Accepted
dlyk1988
dlyk1988
Asked: 2015-02-10 05:48:07 +0800 CST2015-02-10 05:48:07 +0800 CST 2015-02-10 05:48:07 +0800 CST

Docker COPY 问题 - “没有这样的文件或目录”

  • 772

在我的 Dockerfile 中,我有以下“COPY”语句:

# Copy app code
COPY /srv/visitor /srv/visitor

不用说,在我的主机系统中,在“/srv/visitor”目录下,确实有我的源代码:

[root@V12 visitor]# ls /srv/visitor/
Dockerfile  package.json  visitor.js

现在,当我尝试使用此 Dockerfile 构建映像时,它会挂在应该发生“COPY”的步骤:

Step 10 : COPY /srv/visitor /srv/visitor
INFO[0155] srv/visitor: no such file or directory

它说没有这样的目录,但显然有。

有任何想法吗?

更新 1:

有人指出我错了,以我理解构建上下文的方式。该建议相当于将“COPY”声明更改为:

COPY . /srv/visitor

问题是我有这种方式,构建过程在下一步停止:

RUN npm install

当显然有一个时,它说了类似“找不到 package.json 文件”的内容。

更新 2:

我尝试在 Dockerfile 中使用此更改运行它:

COPY source /srv/visitor/

它在尝试运行 npm 时停止:

Step 12 : RUN npm install
 ---> Running in ae5e2a993e11
npm ERR! install Couldn't read dependencies
npm ERR! Linux 3.18.5-1-ARCH
npm ERR! argv "/usr/bin/node" "/usr/sbin/npm" "install"
npm ERR! node v0.10.36
npm ERR! npm  v2.5.0
npm ERR! path /package.json
npm ERR! code ENOPACKAGEJSON
npm ERR! errno 34

npm ERR! package.json ENOENT, open '/package.json'
npm ERR! package.json This is most likely not a problem with npm itself.
npm ERR! package.json npm can't find a package.json file in your current directory.

npm ERR! Please include the following file with any support request:
npm ERR!     /npm-debug.log
INFO[0171] The command [/bin/sh -c npm install] returned a non-zero code: 34

那么,副本执行了吗?如果是,为什么 npm 找不到 package.json?

node.js
  • 12 12 个回答
  • 171441 Views

12 个回答

  • Voted
  1. AlcaDotS
    2016-05-11T07:11:19+08:002016-05-11T07:11:19+08:00

    对我来说,该目录位于正确的上下文中,只是它包含在.dockerignore项目根目录的(隐藏)文件中。这会导致错误消息:

    lstat mydir/myfile.ext: no such file or directory
    
    • 50
  2. Best Answer
    Xavier Lucas
    2015-02-10T05:57:42+08:002015-02-10T05:57:42+08:00

    从文档中:

    <src>路径必须在构建的上下文中;您不能复制 ../something /something,因为 docker 构建的第一步是将上下文目录(和子目录)发送到 docker 守护进程。

    当您使用时,您使用/srv/visitor的是构建上下文之外的绝对路径,即使它实际上是当前目录。

    你最好像这样组织你的构建上下文:

    ├── /srv/visitor
    │   ├── Dockerfile
    │   └── resources
    │       ├── visitor.json
    │       ├── visitor.js
    

    并使用:

    COPY resources /srv/visitor/
    

    笔记:

    docker build - < Dockerfile没有任何上下文。

    因此使用,

    docker build .

    • 49
  3. Adam
    2016-12-15T18:36:29+08:002016-12-15T18:36:29+08:00

    对我来说,问题是我正在使用docker build - < Dockerfile

    来自文档 注意:如果您使用 STDIN ( docker build - < somefile) 构建,则没有构建上下文,因此无法使用 COPY。

    • 9
  4. Ron
    2018-07-28T10:44:37+08:002018-07-28T10:44:37+08:00

    我遇到了这个问题,发现我能够向构建变量添加一个上下文,以便从其他目录加载我的 Dockerfile。这让我可以根据自己的喜好更改我的默认 Docker 文件结构。这是我的 docker-compose.yml 中的一个片段:

    version: '3'
    services:
      webserver:
        build:
          context: .
          dockerfile: ./server/Dockerfile
        ...
    

    通过添加上下文,我能够定义应该引用文件的位置。您可以在此处参考 Docker 文档:https ://docs.docker.com/compose/compose-file/#context

    希望这可以帮助!

    • 3
  5. TamusJRoyce
    2018-03-21T09:17:31+08:002018-03-21T09:17:31+08:00

    正如 Xavier Lucas [非常有用] 的回答所说,您不能从构建上下文之外的目录中使用 COPY 或 ADD(您运行“docker build”的文件夹应该与您的 .Dockerfile 目录相同)。即使您尝试使用符号链接,它也不起作用。

    注意:这是特定于 POSIX(Linux、Unix、Mac,可能是 Windows 的 Linux 子系统)。您可以使用 JUNCTION 在 Windows 中执行类似操作。

    cd ~/your_docker_project/
    cp -al /subfolder/src_directory ./
    echo "COPY src_directory /subfolder/" >> Dockerfile
    

    危险:使用它会使您的 docker 项目特定于主机。你几乎不想这样做!小心轻放。

    应用:在开发环境中学习、试验

    这对我有用。cp -al 复制目录结构并为所有文件建立硬链接。完成后运行“rm -rf ./src_directory”将其删除。

    • 2
  6. Vineeth
    2017-07-12T23:03:42+08:002017-07-12T23:03:42+08:00

    对于以下错误,

    COPY failed: stat
    

    我通过重新启动 docker 服务解决了这个问题。

    • 1
  7. Hawkeye
    2016-10-23T19:28:30+08:002016-10-23T19:28:30+08:00

    对我来说,问题是我添加的文件名有一个尾随空格。重命名修复了它。

    • 0
  8. EmilianoPe
    2017-08-25T05:22:35+08:002017-08-25T05:22:35+08:00

    在我的案例中,我终于解决了这个问题,执行复制的 Dockerfile 位于项目的更深层次。所以我意识到主机的构建路径是相对于 Dockerfile 的文件位置表示的。

    • 0
  9. A Star
    2017-11-12T09:31:32+08:002017-11-12T09:31:32+08:00

    当我尝试从不同的目录运行 docker 文件时,这发生在我身上。

    我已经COPY failed: stat /var/lib/docker/tmp/docker-builder929708051/XXXX: no such file or directory通过指定 docker 文件设法解决了这个问题。

    跑步docker build . -f docker/development/Dockerfile有效。

    但是运行Runningdocker build docker/development/Dockerfile` 导致了这个问题。

    -f或--file指定Dockerfile.

    起初它觉得很奇怪,因为当我Dockerfile在应用程序根目录中有它时它工作正常。如果您想更好地管理环境 docker 文件,这将有所帮助。

    • 0
  10. Loduwijk
    2019-03-13T13:53:20+08:002019-03-13T13:53:20+08:00

    该文件不仅必须位于当前构建上下文中的目录中,而且该文件也不能是指向构建上下文之外的文件的软链接。

    我的主目录中有一个文件的链接,该链接位于项目目录中。在我删除链接并将链接文件移动到项目(rm mylink ; mv ~/myrealfile ./)之后,它就可以工作了。

    • 0

相关问题

  • nginx配置中proxy_set_header的不同字段

  • 有人使用 Node.js 作为实际的 Web 服务器吗?[关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve