等效构建不会表现相同

时间:2017-03-19 06:27:38

标签: node.js docker docker-compose

如果我构建这样的图像:

docker build -f app/Dockerfile -t test .

它构建得很好,但是以下docker-compose.yml(我认为应该是等效的):

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

无法构建。如果我使用--verbose运行docker-compose,我会看到:

  

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 =' ./应用程序/ Dockerfile&#39)

这看起来非常符合我的预期。特别是我得到的错误就是这个(很抱歉包含在代码中,但是引用会造成混乱):

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命令创建,如下所示:

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

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

这可能是什么问题?为什么它手动构建好,但没有用docker-compose构建?

*附录I *

在我继续努力解决这个问题时,我在Dockerfile执行npm install之前添加了一个目录列表......

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目录!这意味着问题是docker-compose没有遵守.dockerignore文件(这会阻止将**/node_modules复制到上下文中)

所以我必须为构建执行一些特殊的伏都教才能正确生成上下文吗?

*附录II *

这是我的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"]

1 个答案:

答案 0 :(得分:0)

我的猜测是你没有使用--unsafe-perm npm键。尝试将npm install更改为:

RUN npm install --production --unsafe-perm
相关问题