2016-08-04 48 views
1

我遇到了一个问题,我确定这对docker专家来说是非常明显的,但是对我来说却是丢失了。docker webpack编译的文件在运行时丢失

下面是我的dockerfile,其中我添加了几个“ls”,因此我可以查看webpack生成的文件。

第一个 “LS” 是正确显示

Step 8 : RUN ls server/public 
---> Running in 67bc7ee5f832 
bundle.css 
bundle.js 
index.html 

但第二LS不

web_1 | index.html 

Dockerfile:

FROM node:6.2 

# Create app directory 
RUN mkdir -p /usr/src/app 
WORKDIR /usr/src/app 
COPY package.json /usr/src/app/ 

RUN npm i 

COPY . /usr/src/app/ 

# Build Static Resources 
RUN npm run build 

# ls here shows correct files 
RUN ls server/public 

# Bundle app source 

ENV NODE_ENV=production 

# ls here doesn't show compiled files 
CMD ls server/public && npm start 

EXPOSE 3000 

我缺少什么?为什么nodejs运行后,这些bundle.css/js不在浏览器中?

如何检查目录是否复制正确?

感谢

回答

1

RUN定义图像的docker build期间执行的一个步骤。

CMD定义当您的容器为docker run时执行的默认命令(或传递给ENTRYPOINT的参数(如果已定义))。

请注意,Docker也会缓存图层,因此如果您执行另一次构建,如果Docker在同一先前图层的散列上查找此精确命令的结果图像,则将跳过RUN ls

要看看你的容器内,你可以运行一个shell浏览它:

docker run -it --rm your_image_name /bin/bash

既然你通过/bin/bash,默认CMD将被忽略,只有一个外壳将启动。

+0

我的问题是我试图把我的仓库拉到远程服务器上;在那里建立图像,然后使用“docker-compose up”,这不起作用(仍然不知道为什么)。 相反,现在我在本地构建映像,将它们上载到Docker集线器,然后将它们拖放到远程服务器上,并单独运行它们,并按预期方式运行 – Lucas

+1

回顾此问题,我预计问题是卷装入撰写文件。没有这个文件,这只是一个猜测。 @Nachiket,请用你的文件打开一个新的问题,评论不是一个问题和答案的好地方。 – BMitch