Last week I was having an issue with a SQL install within a container and to fix I needed to copy the setup log files out of the container onto the host so that I could review.
But how do you copy files out of a container?
Well, thankfully there’s the docker cp command. A really simple command that let’s you copy whatever files you need out of a running container into a specified directory on the host.
I’ll run through a quick demo but I won’t install SQL, I’ll use an existing SQL image and grab its Summary.txt file.
If you don’t have the 2017 SQL image, you can pull it from the docker hub by running: –
docker pull microsoft/mssql-server-windows
Once you have the image, execute the following to spin up a container: –
docker run -d -p 15789:1433 --env ACCEPT_EULA=Y --env sa_password=Testing11@@ --name testcontainer microsoft/mssql-server-windows
Excellent! Now we can open up a powershell session within the container: –
docker exec -it testcontainer powershell
Once we’re in we can verify where the file is: –
cd "C:\Program Files\Microsoft SQL Server\140\Setup Bootstrap\Log\" ls
Now exit out of the powershell session within the container. What we’re going to do is copy the Summary.txt file from the container into the C:\temp directory on the host. To do this run (on the host): –
docker cp testcontainer:"C:\Program Files\Microsoft SQL Server\140\Setup Bootstrap\Log\Summary.txt" C:\temp
Cool! Now we have the file on the host and can review.
Of course this also works for copying files into a container. Say we want to copy test.txt from C:\temp on our host into C:\ in the container. We simply run: –
docker cp C:\temp\test.txt testcontainer:C:\
Nice and easy! All we need to remember is that we always specify the source directory in the cp command first.
Thanks for reading!