Node.js
Docker COPY 問題 - “沒有這樣的文件或目錄”
在我的 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 .