Node.js

Docker COPY 問題 - “沒有這樣的文件或目錄”

  • June 10, 2020

在我的 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?

從文件中:

<src>路徑必須在建構的上下文中;您不能複制 ../something /something,因為 docker 建構的第一步是將上下文目錄(和子目錄)發送到 docker 守護程序。

當您使用時,您使用/srv/visitor的是建構上下文之外的絕對路徑,即使它實際上是目前目錄。

你最好像這樣組織你的建構上下文:

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

並使用:

COPY resources /srv/visitor/

筆記:

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

因此使用,

docker build .

引用自:https://serverfault.com/questions/666149