我遇到了一个问题我确信这对码头专家来说非常明显,但却迷失在我身上。
下面是我的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不存在于浏览器中?
如何检查目录是否正确复制?
由于
答案 0 :(得分:1)
RUN
定义了在图片docker build
期间执行的步骤。
CMD
定义了ENTRYPOINT
容器时执行的默认命令(或传递给docker run
的参数(如果已定义))。
请注意,Docker还会缓存图层,因此如果您执行其他构建,如果Docker在同一个上一层的哈希上找到此精确命令的结果图像,则会跳过RUN ls
。
要查看容器内部,可以运行shell来浏览它:
docker run -it --rm your_image_name /bin/bash
自您通过/bin/bash
后,将绕过默认的CMD
,并且只会启动一个shell。