docker-compose ps
実行時にTLSParameterError
エラーが発生し、解決をするために調べた内容のまとめです。
エラー内容
docker-compose ps
実行時に下記のエラーが発生しました。
Traceback (most recent call last):
File "docker-compose", line 6, in <module>
File "compose/cli/main.py", line 71, in main
File "compose/cli/main.py", line 124, in perform_command
File "compose/cli/command.py", line 39, in project_from_options
File "compose/cli/docker_client.py", line 84, in tls_config_from_options
File "site-packages/docker/tls.py", line 81, in __init__
docker.errors.TLSParameterError: Path to a certificate and key files must be provided through the client_config param. TLS configurations should map the Docker CLI client configurations. See https://docs.docker.com/engine/articles/https/ for API details.
[99424] Failed to execute script docker-compose
対応
エラーで検索をしたところ、下記のgithub issueが見つかりました。
docker-compose $(docker-machine config default) up Fails.
Try docker-compose $(docker-machine config default | xargs ) ps
とのことでしたので、実行したところ動くようになりました。
$ docker-compose $(docker-machine config default | xargs ) ps
ERROR: TLS configuration is invalid - make sure your DOCKER_TLS_VERIFY and DOCKER_CERT_PATH are set correctly.
You might need to run `eval "$(docker-machine env default)"`
$ eval "$(docker-machine env default)"
$ docker-compose $(docker-machine config default | xargs ) ps
Name Command State Ports
-----------------------------------------------------------------------------------------------
mysql docker-entrypoint.sh --inn Up 0.0.0.0:3306->3306/tcp,
... 33060/tcp
php-fpm docker-php-entrypoint php-fpm Up 9000/tcp
(一部省略)
その後 docker-compose ps
で動くようになりました。
$ docker-compose ps
Name Command State Ports
-----------------------------------------------------------------------------------------------
mysql docker-entrypoint.sh --inn Up 0.0.0.0:3306->3306/tcp,
... 33060/tcp
php-fpm docker-php-entrypoint php-fpm Up 9000/tcp
evalコマンドとは?
そもそも実行したevalコマンドがわからなかったのですが、文字列をコマンドとして実行するためのコマンドだそうです。
【 eval 】コマンド――文字列を評価、連結して実行する
evalコマンドが威力を発揮する場面は2つあります。1つはあるコマンドが出力した文字列自体をコマンドとして実行すること、もう1つは(入れ子になった)変数を評価することです。
# コマンドとして実行されない
$ 'time'
# コマンドとして実行される
$ eval 'time'
shell 0.21s user 0.15s system 0% cpu 12:14.77 total
children 1.31s user 1.73s system 0% cpu 12:14.77 total
つまり、先ほど実行した eval "$(docker-machine env default)"
に関しては
docker-machine env default
の出力文字列をコマンドとして実行していると認識すれば良さそうです。
docker-machine env default
こちらの出力について確認をしました。
$ docker-machine env default
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.102:2376"
export DOCKER_CERT_PATH="/Users/user/.docker/machine/machines/default"
export DOCKER_MACHINE_NAME="default"
# Run this command to configure your shell:
# eval $(docker-machine env default)
環境変数として上記の値が設定されていなかったため、今回のエラーになったようです。