Configuré dos contenedores de Windows para el servidor ASP.NET y MSSQL. En la primera compilación de docker-compose, todo funciona como se esperaba. Luego, después de realizar algunos cambios en el archivo acoplable personalizado y ejecutar la compilación docker-compose nuevamente, usa el contenedor anterior nuevamente, sin realizar ningún cambio.
Supuse que cuando hice una compilación, creó un nuevo contenedor. ¿Estoy malinterpretando cómo funciona la ventana acoplable?
Este es el 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"Este es el archivo mssql.docker
# 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.ps1Es muy fácil saber si la imagen ha sido reutilizada porque mkdir C:\temp da un error diciendo que el directorio ya existe.
EDITAR: ya probé todas las opciones en docker compose. sin caché, force-rm
docker-compose buildSolo construye imágenes pero no inicia contenedores.
Es por eso que no se aplican sus cambios en dockerfile. Ha reconstruido la imagen pero no el contenedor. Es la razón por la que el contenedor que se lanzó anteriormente se basa en la versión anterior de la imagen.
docker-compose upDe la documentación de Docker:
Si hay contenedores existentes para un servicio y la configuración o la imagen del servicio se cambió después de la creación del contenedor, docker-compose up recoge los cambios al detener y volver a crear los contenedores (preservando los volúmenes montados). Para evitar que Compose detecte los cambios, use la marca --no-recreate.
Para asegurarse de que tanto su imagen como su contenedor se reconstruyen, debe agregar estas banderas:
docker-compose up --force-recreate --buildDe esa manera, sus contenedores se basan en la versión de imagen correcta.
Explicación sobre las banderas de la documentación de Docker:
--build Build images before starting containers. --force-recreate Recreate containers even if their configuration and image haven't changed.Si desea hacer esto para un servicio específico, simplemente agregue el nombre del servicio al final de la línea de comando:
docker-compose up --force-recreate --build serviceName Otro indicador útil si desea una salida clara es el indicador -d :
-d, --detach Detached mode: Run containers in the background, print new container names. Incompatible with¡Resulta que simplemente tuve que hacer docker-compose pull antes docker-compose build para actualizar el dockerfile! ¡Ahora construye una imagen fresca cada vez!