等同构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