env

docker コマンドの実行時に、特定のマシンを指し示せるような環境変数を表示します。

$ docker-machine env --help

Usage: docker-machine env [OPTIONS] [arg...]

Display the commands to set up the environment for the Docker client

Description:
   Argument is a machine name.

Options:

   --swarm  Display the Swarm config instead of the Docker daemon
   --shell  Force environment to be configured for a specified shell: [fish, cmd, powershell], default is sh/bash
   --unset, -u  Unset variables instead of setting them
   --no-proxy   Add machine IP to NO_PROXY environment variable

docker-machine env マシン名 を実行すると、サブシェル上で実行可能な export コマンドが表示されます。 docker-machine env -u を実行すると、この効果を無効化する unset コマンドを表示します。

$ env | grep DOCKER
$ eval "$(docker-machine env dev)"
$ env | grep DOCKER
DOCKER_HOST=tcp://192.168.99.101:2376
DOCKER_CERT_PATH=/Users/nathanleclaire/.docker/machines/.client
DOCKER_TLS_VERIFY=1
DOCKER_MACHINE_NAME=dev
$ # If you run a docker command, now it will run against that host.
$ eval "$(docker-machine env -u)"
$ env | grep DOCKER
$ # The environment variables have been unset.

上記の出力は bashzsh シェル上での実行を想定したものです(どのシェルを使っているか分からなければ、大抵の場合 bash でしょう)。しかし、Docker Machine がサポートしているシェルはこれだけではありません。どのようなコマンドを使うかは、それぞれの環境にあわせる必要があります。現時点では bashcmdpowershellemacs のシステムをサポートしています。

もし fish を使っており、 SHELL 環境変数が fish のパスを適切に設定しているのであれば、 docker-machine env マシン名 を実行すると、 fish を想定した形式で値が表示されます。

set -x DOCKER_TLS_VERIFY 1;
set -x DOCKER_CERT_PATH "/Users/nathanleclaire/.docker/machine/machines/overlay";
set -x DOCKER_HOST tcp://192.168.99.102:2376;
set -x DOCKER_MACHINE_NAME overlay
# Run this command to configure your shell:
# eval "$(docker-machine env overlay)"

docker-machine env コマンドはシェルを自動的に検出します。しかし、もし Windows でパワーシェルや cmd.exe を使う場合であれば、自動検出できません。そのため、 docker-machine env に自分で --shell フラグのオプションを上書き指定する必要があります。

パワーシェルの例:

$ docker-machine.exe env --shell powershell dev
$Env:DOCKER_TLS_VERIFY = "1"
$Env:DOCKER_HOST = "tcp://192.168.99.101:2376"
$Env:DOCKER_CERT_PATH = "C:\Users\captain\.docker\machine\machines\dev"
$Env:DOCKER_MACHINE_NAME = "dev"
# Run this command to configure your shell:
# docker-machine.exe env --shell=powershell dev | Invoke-Expression

cmd.exe の例:

$ docker-machine.exe env --shell cmd dev
set DOCKER_TLS_VERIFY=1
set DOCKER_HOST=tcp://192.168.99.101:2376
set DOCKER_CERT_PATH=C:\Users\captain\.docker\machine\machines\dev
set DOCKER_MACHINE_NAME=dev
# Run this command to configure your shell: copy and paste the above values into your command prompt

プロキシを使わずにマシンを作成

env コマンドは --no-proxy フラグをサポートしています。これは、作成するマシンの IP アドレスに NO_PROXY / no_proxy 環境変数 を追加します。

インターネットへのアクセスに HTTP プロキシが必要なネットワーク環境では、ローカルの仮想マシン・プロバイダ(例: virtualboxvmwarefusion )で docker-machine を使うのにこれが役立ちます。

$ docker-machine env --no-proxy default
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.104:2376"
export DOCKER_CERT_PATH="/Users/databus23/.docker/machine/certs"
export DOCKER_MACHINE_NAME="default"
export NO_PROXY="192.168.99.104"
# Run this command to configure your shell:
# eval "$(docker-machine env default)"

また、 設定ドキュメント から、 docker-machine create コマンド作成時に --engine-env フラグでデーモンの HTTP_PROXY を指定する方法も参考になるでしょう。