1. ホーム
  2. bash

[解決済み] eval "$(docker-machine env default) "とする。

2022-02-15 07:20:57

質問

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です。API接続の詳細を変更することで、ローカルのCLIからリモートのDockerホストを管理することができ、DockerはCLIを実行するクライアントの環境変数にそれを保存します。

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 Engine に接続しようとします)。