使用 docker-compose build 时 Docker 不会创建新容器

Lla*_*aNL 5 windows powershell docker

我已经为 ASP.NET 和 MSSQL 服务器设置了两个 Windows 容器。在第一个 docker-compose 构建中,一切都按预期工作。然后在我对自定义 dockerfile 进行一些更改并再次运行 docker-compose build 后,它再次使用旧容器,而不进行任何更改。

我假设当我进行构建时,它创建了一个新容器。我误解了 docker 的工作原理吗?

这是 docker-compose.yml

version: '3'
services:
  db:
    image: microsoft/mssql-server-windows-developer

    environment:
      sa_password: "Password1234!"
      ACCEPT_EULA: "Y"

    ports:
      - "8003:1433"
    build:
      context: .
      dockerfile: mssql.dockerfile

  web:
    build:
      context: .
      dockerfile: web.dockerfile
    image: mcr.microsoft.com/dotnet/framework/aspnet:4.8
    #volumes:
    #  - .:C:/inetpub/wwwroot
    ports: 
      - "8080:80"
      - "8081:431"
Run Code Online (Sandbox Code Playgroud)

这是 mssql.dockerfile

# escape=`

FROM microsoft/mssql-server-windows-developer

#set shell
SHELL ["powershell.exe", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]

#make temp folder
RUN mkdir C:\temp

#copy script to temp folder
COPY DownloadDatabase.ps1 C:\temp
COPY RestoreDatabase.ps1 C:\temp

#run script to retrieve production database
WORKDIR C:\temp

RUN .\DownloadDatabase.ps1 -sourcefile <url> -destinationfile <target>

CMD .\RestoreDatabase.ps1
Run Code Online (Sandbox Code Playgroud)

由于 mkdir C:\temp 错误指出该目录已存在,因此很容易判断该映像是否已被重新使用。

编辑:我已经尝试了 docker compose 的所有选项。无缓存,强制rm

Lla*_*aNL 0

事实证明我docker-compose pull之前只需要docker-compose build刷新 dockerfile 就可以了!现在它每次都会建立一个新鲜的形象!