我是Docker的新手,发现有很多图像正在创建(如sudo docker images
中所示),并在stackoverflow中的某处找到,以定期运行sudo docker rmi $(sudo docker images -q)
以删除所有图像。为什么要创建这么多图像?我的配置有问题吗?
搬运工-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_modules
nginx dockerfile是
FROM nginx:alpine
COPY nginx.conf /etc/nginx/conf.d/default.conf
nodejs 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
。
答案 0 :(得分:0)
不应该创建“这么多图像”。
如果你想确保只保留你需要的那个(不必每次都重建所有东西);只需(如I detail here):
[HttpPost]
[Route("~/api/trackAllInOne/set")]
[Consumes("application/x-www-form-urlencoded")]
public IActionResult Post([FromForm] string data)
{
PlayerPackage playerPackage = JsonConvert.DeserializeObject<PlayerPackage>(data);
return Json(data);
}
答案 1 :(得分:0)
图像是不可变的,因此您所做的任何更改都会导致创建新图像。由于compose文件指定了build命令,因此在启动容器时它将重新运行build命令。如果您使用COPY
或ADD
更改了任何文件,则不再使用现有的图像缓存,它将构建新图像而不删除旧图像。
注意,我建议在撰写文件中命名您的图像,以便清楚正在重建哪个图像。您可以将构建构建输出观察到第一步,即不使用缓存进行报告以查看正在发生的变化。如果我猜测,破坏缓存并导致新图像的行是nodejs中的这一行:
COPY . /usr/src/app
如果容器中不需要更改文件并导致重建,请使用.dockerignore
文件排除不必要的文件。
答案 2 :(得分:0)
在构建Dockerfile时,我遇到了同样的问题。
我找到了解决方案,使用此命令来构建文件:
`docker build --rm -t <tag> .`
选项--rm
在成功构建后会删除中间容器。