等同构build不相同

如果我build立这样的图像:

docker build -f app/Dockerfile -t test . 

它build立得很好,但下面docker-compose.yml (我相信应该是等效的):

 app: container_name: test build: context: . dockerfile: app/Dockerfile 

无法build立。 如果我运行docker-compose与--verbose我看到:

compose.cli.verbose_proxy.proxy_callable:docker build < – (pull = False,stream = True,nocache = False,tag = u'prj_app',buildargs = None,rm = True,forcerm = False,path ='/ Users / ekkis / dev / prj',dockerfile ='。/ app / Dockerfile')

这似乎是我所期望的。 特别是我得到的错误是(抱歉,包括作为代码,但报价混乱的事情):

 npm WARN app@1.0.0 No description npm WARN app@1.0.0 No repository field. npm ERR! Linux 4.9.12-moby npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install" "/tmp/inc" npm ERR! node v7.7.3 npm ERR! npm v4.1.2 npm ERR! path /usr/src/app/node_modules/inc npm ERR! code ENOENT npm ERR! errno -2 npm ERR! syscall access npm ERR! enoent ENOENT: no such file or directory, access '/usr/src/app/node_modules/inc' npm ERR! enoent ENOENT: no such file or directory, access '/usr/src/app/node_modules/inc' npm ERR! enoent This is most likely not a problem with npm itself npm ERR! enoent and is related to npm not being able to find a file. npm ERR! enoent npm ERR! Please include the following file with any support request: npm ERR! /usr/src/app/npm-debug.log 

从上面可以看到,Dockerfile执行npm install /tmp/inc ,从我看到的输出成功,因为它打印了一个安装的模块树。 /tmp/inc由下面显示的Dockerfile命令创build成功:

 Step 8/11 : ADD inc /tmp/inc ---> Using cache ---> fce607bb13ca 

我注意到app/npm-debug.log没有被写入,在运行docker的目录中也没有写入日志文件。

这里可能是什么问题? 为什么它build立手动但不与docker合成?

*附录I *

在我继续努力弄清楚,我在Dockerfile执行npm安装之前添加了一个目录列表…

 Step 9/13 : RUN ls -alF ---> Running in ac0c62b7da93 total 28 drwxr-xr-x 3 root root 4096 Mar 19 07:01 ./ drwxr-xr-x 4 root root 4096 Mar 19 07:01 ../ -rw-r--r-- 1 root root 722 Mar 19 05:48 config.json -rw-r--r-- 1 root root 3786 Mar 19 05:48 index.js drwxr-xr-x 119 root root 4096 Mar 17 18:57 node_modules/ -rw-r--r-- 1 root root 2910 Mar 17 20:51 npm-debug.log -rw-r--r-- 1 root root 416 Mar 19 06:39 package.json 

…最有趣的是,那里已经有一个node_modules目录了! 这意味着问题在于.dockerignore -compose不遵守.dockerignore文件(这会阻止将**/node_modules复制到上下文中)

那么是否有一些特殊的巫术我必须执行的构build生成正确的上下文?

*附录二*

这里是我的Dockerfile:

 FROM node:latest EXPOSE 8000 ENV PORT 8000 RUN apt-get update RUN groupadd -r tst && useradd -m -r -g tst tst WORKDIR /usr/src/app ADD app /usr/src/app ADD inc /tmp/inc RUN npm install --production RUN npm install /tmp/inc RUN rm -rf /tmp/inc CMD ["npm", "start"] 

我的猜测是你不用--unsafe-perm npm键。 尝试更改npm install到:

 RUN npm install --production --unsafe-perm