我是Docker的新手,我发现有许多镜像正在被创建(如sudo docker images中所见),并在堆栈溢出中的某处找到,以定期运行sudo docker rmi $(sudo docker images -q)来删除所有镜像。为什么会创建这么多镜像?我的配置有问题吗?
docker-compose.yml
nginx:
build: ./nginx
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- /etc/letsencrypt/:/etc/letsencrypt/
links:
- node:node
node:
build: ./node
restart: always
ports:
- "8080:8080"
volumes:
- ./node:/usr/src/app
- /usr/src/app/node_modulesnginx dockerfile是
FROM nginx:alpine
COPY nginx.conf /etc/nginx/conf.d/default.confnodejs dockerfile是
FROM node:9.3.0-alpine
WORKDIR /usr/src/app
COPY package*.json /usr/src/app/
RUN npm install --only=production
COPY . /usr/src/app
EXPOSE 8080
CMD [ "npm", "start" ]网站/应用程序运行正常。除了定期删除所有容器和图像,然后运行:sudo docker-compose up --build -d。
发布于 2018-03-03 18:31:41
图像是不可变的,所以您所做的任何更改都会导致创建一个新的图像。因为您的组合文件指定了build命令,所以当您启动容器时,它将重新运行build命令。如果COPY或ADD中包含的任何文件发生更改,则不再使用现有的映像缓存,它将构建一个新映像,而不会删除旧映像。
请注意,我建议在撰写文件中命名您的映像,以便清楚正在重建哪个映像。您可以观察编写构建的第一步的输出,第一步不报告使用缓存来查看发生了什么变化。如果我猜的话,会破坏缓存并导致新图像的代码行是nodejs中的这一行:
COPY . /usr/src/app如果容器中不需要正在更改并导致重新构建的文件,则使用.dockerignore文件排除不必要的文件。
发布于 2020-05-26 14:46:15
我在构建Dockerfile时也遇到了同样的问题。
我找到了解决方案,使用以下命令构建您的文件:
`docker build --rm -t <tag> .`选项--rm在成功构建后删除中间容器。
发布于 2018-03-02 13:58:49
https://stackoverflow.com/questions/49062367
复制相似问题