Docker-composeでdockerを起動すると問題が発生します。
_docker-compose -f dev.yml build
_を実行すると、次のエラーが発生します>
_Building postgres
ERROR: Couldn't connect to Docker daemon - you might need to run `docker-machine start default`.
_
しかし、_docker-machine ls
_を実行すると、マシンは明らかに稼働しています>
_NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
default - virtualbox Running tcp://192.168.99.100:2376 v1.12.1
_
eval "$(docker-machine env default)"
を実行してエラーを修正した後、_docker-compose -f dev.yml build
_が正常に完了します。
なぜこれが機能したのか、実際に何が起こり、どうやって元に戻すのか、という私の質問。
これはこれを修正する安全な方法ですか?現在、これは私のラップトップだけですが、これらのコンテナは近い将来に会社のサーバーにヒットするはずです。
私はbashに堪能ではありませんが、eval
を実行しないように、特に "でevalを実行しないように常に指示されています
docker
コマンドを実行すると、CLIはDockerデーモンのAPIに接続し、実際に機能するのはAPIです。 CLIが実行されているクライアントの環境変数にDockerが保存するAPI接続の詳細を変更することにより、ローカルCLIからリモートDockerホストを管理できます。
Docker Machineを使用すると、Dockerエンジンは実質的にリモートマシンであるVMで実行されるため、ローカルCLIをそれに接続するように構成する必要があります。 Docker Machineは、管理するエンジンの接続の詳細を知っているため、docker-machine env default
を実行すると、default
マシンの詳細が出力されます。出力は次のようになります。
$ docker-machine env default
export DOCKER_TLS_VERIFY="1"
export DOCKER_Host="tcp://172.16.62.130:2376"
export DOCKER_CERT_PATH="/Users/elton/.docker/machine/machines/default"
export DOCKER_MACHINE_NAME="default"
eval
を使用すると、それらのexport
コマンドをそれぞれコンソールに書き込むだけでなく実行するので、環境変数をすばやく設定できます。
それを元に戻し、docker-machine env --unset
を使用してローカル環境をリセットできます。これにより、環境を設定解除するための出力が提供されます(そのため、CLIはローカルDockerエンジンに接続しようとします)。
これは確かに、DockerをネイティブでサポートしていないマシンでDockerを使用するための予想される方法です。 WindowsまたはMac OSX。
DockerドキュメントのDocker Machineを使用するための説明に、このステップが含まれています。 https://docs.docker.com/machine/get-started/
このステップの機能(自分でも試してみることをお勧めします):
docker-machine env default
を実行します。docker-machine env default
を自分で実行すると、DockerコマンドがVM Dockerデーモンを実行していることを検出できるようにするいくつかの環境変数を設定するように提案するだけです。これらの変数を設定しないと、 、DockerはDockerデーモンと通信する方法を知りません。
サーバー環境(Linux)では、Linuxカーネルがコンテナーの実行をネイティブでサポートしているため、Docker Machineは必要ありません。実行中のコンテナーをネイティブでサポートしていないオペレーティングシステムでのみ、Dockerマシン(小さなVM Linuxカーネルを実行))が必要です。