Initializing #Docker Volumes in #WindowsContainerPublished on 06 Feb 2017
In my previous post about volumes in Windows containers, I demonstrated how to use volumes to clean up installation files. But I did not answer the question how to use volumes similar to those in Docker for Linux where you can define a volume and add files to it in
Dockerfile. Remember it is not possible to create a volume on a non-empty directory in Windows Containers.
Unfortunately, when building a Windows container data is not persisted if the volume was defined before data was added to it. This can only be solved by storing the data somewhere else in the container and copying the files when the container starts. This is demonstrated by the following
FROM microsoft/windowsservercore SHELL ["powershell", "-Command"] ADD bootstrap c:\bootstrap ADD Invoke-Bootstrap.ps1 c:/ VOLUME c:\\data ENTRYPOINT c:\Invoke-Bootstrap.ps1
As soon as the container starts, the PowerShell script
Invoke-Bootstrap.ps1 copies all files from
c:\bootstrap to the volume mounted in
'Bootstrapping...' Copy-Item -Path c:\bootstrap\* -Destination c:\data -Recurse -Verbose 'Done.'