Using Docker Machine docker-machine version 0.5.6, build 61388e9
on Windows 10 x64.
The command returned by docker-machine env --shell cmd default
is
SET DOCKER_TLS_VERIFY=1
SET DOCKER_HOST=tcp://192.168.99.100:2376
SET DOCKER_CERT_PATH=C:\Users\raees\.docker\machine\machines\default
SET DOCKER_MACHINE_NAME=default
REM Run this command to configure your shell:
REM FOR /f "tokens=*" %i IN ('docker-machine env --shell cmd default') DO %i
But if I execute the last one
FOR /f "tokens=*" %i IN ('docker-machine env --shell cmd default') DO %i
It returns an error i was unexpected at this time.
. Which means that the FOR loop is not valid.
There are a couple of changes recently on this. Does the issue comes out with 0.6.0 version ?
After the upgrade, when I executed docker-machine env --shell cmd default
, it said that it couldnt connect to the Docker virtual machine. So, I deleted the previous one and started Docker Quick Start Terminal and it also said that it couldnt start the VM. So, I deleted the failed VM and Hostonly interfaces in VirtualBox and started Quick Start Terminal again and that is failing also.
Running pre-create checks...
Creating machine...
(default) Copying C:\Users\raees\.docker\machine\cache\boot2docker.iso to C:\Users\raees\.docker\machine\machines\default\boot2docker.iso...
(default) Creating VirtualBox VM...
(default) Creating SSH key...
(default) Starting the VM...
(default) Check network to re-create if needed...
(default) Windows might ask for the permission to create a network adapter. Sometimes, such confirmation window is minimized in the taskbar.
(default) Found a new host-only adapter: "VirtualBox Host-Only Ethernet Adapter"
(default) Windows might ask for the permission to configure a network adapter. Sometimes, such confirmation window is minimized in the taskbar.
(default) Windows might ask for the permission to configure a dhcp server. Sometimes, such confirmation window is minimized in the taskbar.
Error creating machine: Error in driver during machine creation: Unable to start the VM: exit status 1
Looks like something went wrong... Press any key to continue...
Its on docker-machine version 0.6.0, build e27fb87
Ouch, an upgrade
bug.
You should probably clean that up ( in docker-machine and virtualbox ), and instead of launching Docker QuickStart, runs docker-machine -D create -d virtualbox default
and check the details there
I had to do a whole lot of clean up. Uninstalled Docker Toolbox and VirtualBox, deleted cleaned up temp dirs and deleted .docker directory. Reinstalled Docker Toolbox and Docker is running fine now. Luckily I had no important stuff in Windows installation
I think it was a certificates issue, as I remember that when I tried to execute docker-machine env --shell cmd default
for the first time after upgrade, it said that it couldn't verify the certificates and I should recreate them, so, I executed the command it suggested to recreate certificates and that didn't work also or maybe it broke it permanently.
docker-machine env --shell cmd default
return
SET DOCKER_TLS_VERIFY=1
SET DOCKER_HOST=tcp://192.168.99.100:2376
SET DOCKER_CERT_PATH=C:\Users\raees\.docker\machine\machines\default
SET DOCKER_MACHINE_NAME=default
REM Run this command to configure your shell:
REM FOR /f "tokens=*" %i IN ('docker-machine env --shell cmd default') DO %i
and when I execute
FOR /f "tokens=*" %i IN ('docker-machine env --shell cmd default') DO %i
It still returns i was unexpected at this time.
@raeesiqbal your current shell is cmd.exe
right ?
Does the output of docker-machine env
works ? Without the --cmd shell default
cc @StefanScherer please take a look at this and let us know if you can dupe!
@raeesiqbal Are you running the FOR loop interactively or in a Batch script?
Using a cmd.exe
shell in a Win10x64 machine with the FOR loop
FOR /f "tokens=*" %i IN ('docker-machine env --shell cmd default') DO %i
everything works well:
Microsoft Windows [Version 10.0.10586]
(c) 2015 Microsoft Corporation. All rights reserved.
C:\Users\vagrant>FOR /f "tokens=*" %i IN ('docker-machine env --shell cmd default') DO %i
C:\Users\vagrant>SET DOCKER_TLS_VERIFY=1
C:\Users\vagrant>SET DOCKER_HOST=tcp://192.168.99.100:2376
C:\Users\vagrant>SET DOCKER_CERT_PATH=C:\Users\vagrant\.docker\machine\machines\default
C:\Users\vagrant>SET DOCKER_MACHINE_NAME=default
C:\Users\vagrant>REM Run this command to configure your shell:
C:\Users\vagrant>REM FOR /f "tokens=*" %i IN ('"C:\ProgramData\chocolatey\lib\docker-machine\bin\docker-machine.exe" env --shell cmd default') DO %i
C:\Users\vagrant>set dock
DOCKER_CERT_PATH=C:\Users\vagrant\.docker\machine\machines\default
DOCKER_HOST=tcp://192.168.99.100:2376
DOCKER_MACHINE_NAME=default
DOCKER_TLS_VERIFY=1
C:\Users\vagrant>
But using this FOR loop FOR /f "tokens=*" %i IN ('docker-machine env --shell cmd default') DO %i
in a .bat
file it doesn't work:
C:\Users\vagrant>notepad setenv.bat
C:\Users\vagrant>setenv.bat
i was unexpected at this time.
C:\Users\vagrant>FOR /f "tokens=*" i
The problem is that in a .bat
script you have to use two %%
signs for these variables. So changing the setenv.bat
script to
FOR /f "tokens=*" %%i IN ('docker-machine env --shell cmd default') DO %%i
works.
Microsoft Windows [Version 10.0.10586]
(c) 2015 Microsoft Corporation. All rights reserved.
C:\Users\vagrant>setenv.bat
C:\Users\vagrant>FOR /F "tokens=*" %i IN ('docker-machine env --shell cmd default') DO %i
C:\Users\vagrant>SET DOCKER_TLS_VERIFY=1
C:\Users\vagrant>SET DOCKER_HOST=tcp://192.168.99.100:2376
C:\Users\vagrant>SET DOCKER_CERT_PATH=C:\Users\vagrant\.docker\machine\machines\default
C:\Users\vagrant>SET DOCKER_MACHINE_NAME=default
C:\Users\vagrant>REM Run this command to configure your shell:
C:\Users\vagrant>REM FOR /f "tokens=*" %i IN ('"C:\ProgramData\chocolatey\lib\docker-machine\bin\docker-machine.exe" env --shell cmd default') DO %i
C:\Users\vagrant>set doc
DOCKER_CERT_PATH=C:\Users\vagrant\.docker\machine\machines\default
DOCKER_HOST=tcp://192.168.99.100:2376
DOCKER_MACHINE_NAME=default
DOCKER_TLS_VERIFY=1
But we can't just add the second %
sign as this does not work interactively in a cmd.exe
shell:
Microsoft Windows [Version 10.0.10586]
(c) 2015 Microsoft Corporation. All rights reserved.
C:\Users\vagrant>FOR /f "tokens=*" %%i IN ('docker-machine env default') DO %%i
%%i was unexpected at this time.
C:\Users\vagrant>
PS: With docker-machine 0.6.0 you can normally skip the --shell cmd
FOR /f "tokens=*" %i IN ('docker-machine env default') DO %i
FOR /f "tokens=*" %%i IN ('docker-machine env default') DO %%i
docker-machine env default | iex
Yes, my current shell is cmd.exe
. And yes I'm actually using a batch script to configure ssh-agent
in the background whenever a new cmd
is spawned. I though it was a good idea to configure docker
within that also, and I was using single % for variables in batch.
Now when I execute FOR /f "tokens=*" %i IN ('docker-machine env default') DO %i
, it seems to work fine in the interactive shell.
But when I put FOR /f "tokens=*" %%i IN ('docker-machine env default') DO %%i
in the batch script. It just hangs there, and CPU usage goes up to ~50%. Maybe because its stuck in an infinite loop?
@raeesiqbal Don't know. I have tested a small batch script and a shortcut as follows:
Shortcut target: C:\Windows\System32\cmd.exe /K %USERPROFILE%\setenv.bat
setenv.bat:
@echo off
echo Set Docker envs
FOR /f "tokens=*" %%i IN ('docker-machine env default') DO %%i
echo Done!
Opening the CMD shell works fine and using docker works.
What is your setup?
Ah.... found the problem. It worked just fine for me when executed after the cmd
had loaded. But as weird as it gets, FOR
runs a new command processor for every loop! and since I was using FOR /f "tokens=*" %%i IN ('docker-machine env default') DO %%i
in the startup script of cmd
. It was causing an infinite loop.
So, here is what I did.
IF DEFINED DOCKER_MACHINE_EXECUTING (GOTO :eod)
set DOCKER_MACHINE_EXECUTING=1
:configureDocker
FOR /f "tokens=*" %%i IN ('docker-machine env default') DO %%i
:eod
@StefanScherer and @jeanlaurent thank you so much for your time.
I like to use
@echo off
echo Set Docker envs
FOR /f "tokens=*" %%i IN ('docker-machine env %1') DO %%i
echo Done!
That way I can do
setenv (will be default)
or
setenv machine2
etc
It works for me thanks ...
Most helpful comment
Ah.... found the problem. It worked just fine for me when executed after the
cmd
had loaded. But as weird as it gets,FOR
runs a new command processor for every loop! and since I was usingFOR /f "tokens=*" %%i IN ('docker-machine env default') DO %%i
in the startup script ofcmd
. It was causing an infinite loop.So, here is what I did.