env

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

$ docker-machine env --help

使い方: docker-machine env [オプション] [引数...]

Docker クライアント用の環境変数をセットアップするコマンドを表示

説明:
   引数はマシン名。

オプション:

   --swarm  Docker デーモンの代わりに Swarm の設定を表示
   --shell  環境変数を設定するシェルを指定: [fish, cmd, powershell, tcsh], デフォルトは sh/bash
   --unset, -u  環境変数の値を指定せずにリセット
   --no-proxy   マシンの IP アドレスに NO_PROXY 環境変数の追加

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)"

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