如果我构建这样的图像:
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"]
答案 0 :(得分:0)
我的猜测是你没有使用--unsafe-perm
npm键。尝试将npm install
更改为:
RUN npm install --production --unsafe-perm