我正在尝试设置反应应用程序的容器 . 我的目标是使用 docker-compose
(我想执行一个命令并使一切正常)
问题是当我尝试使用docker-compose和docker文件(在下面)时,我得到的信息是:
docker-compose.yml
version: '2'
services:
react:
build: ./images/react
ports:
- "3000:3000"
volumes:
- "/home/my/path:/app"
Dockerfile
FROM node:6.9
WORKDIR /app
RUN npm install
EXPOSE 3000
CMD [ "npm", "start" ]
Result
npm WARN enoent ENOENT:没有这样的文件或目录,打开'/app/package.json'
但是,当我使用docker run和卷映射时,我能够看到packages.json并运行npm install命令 .
docker run -it --rm -v /home/my/path:/app node:6.9 bash
为什么它不使用docker撰写?
1 回答
请注意,您在
docker-compose.yml
文件中描述的卷将在运行时挂载,而不是在生成时挂载 . 这意味着在构建映像时,尚未存在任何package.json
文件,您可以从中安装依赖项 .使用
-v /home/my/path:/app
run
ning容器映像时,实际上是先安装目录,后续的npm install
调用将成功完成 .如果您打算将应用程序(包括
package.json
)安装到容器中,npm install
需要在运行时(CMD
)发生,而不是在构建时(RUN
)发生 .完成此操作的最简单方法是简单地将
npm install
语句添加到CMD
指令(并删除RUN npm install
指令):