Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
OrganizationAdvent CalendarQiitadon (β)
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Docker Machine 複数利用時のIP変動による Error checking TLS connection 対策

More than 3 years have passed since last update.


docker-machine の各種コマンド実行時に TLS 接続エラーになったら
docker-machine regenerate-certs マシン名 すれば OK


複数の docker machine を生成して利用していると、マシンを起動した順で から順に末尾 101, 102, ... とIPアドレスが割り当てられます。

各 VM に対して docker-machine コマンドが SSH 接続してアレコレするわけですが、起動順序の関係で前回接続時と IP アドレスが変わっていると Error checking TLS connection となって docker-machine env などができなくなります。

例えば defaultmyapp の2つのマシンがあり、 docker-machine start する順序が前回と違ったりすると

[hidekuro@localhost]~$ docker-machine ls
NAME    ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER    ERRORS
myapp   -        virtualbox   Running   tcp://           Unknown   Unable to query docker version: Get x509: certificate is valid for, not
default -        virtualbox   Stopped                                       Unknown

エラっている。 myapp の証明書はホスト 用だから では使えないぞーと言われてます。

この状態で docker-machine env myapp を実行しても

[hidekuro@localhost]~$ docker-machine env myapp
Error checking TLS connection: Error checking and/or regenerating the certs: There was an error validating certificates for host "": x509: certificate is valid for, not
You can attempt to regenerate them using 'docker-machine regenerate-certs [name]'.
Be advised that this will trigger a Docker daemon restart which will stop running containers.



案内に従って docker-machine regenerate-certs マシン名 で TLS 証明書を再生成します。

[hidekuro@localhost]~$ docker-machine regenerate-certs myapp
Regenerate TLS machine certs?  Warning: this is irreversible. (y/n): y
Regenerating TLS certificates
Waiting for SSH to be available...
Detecting the provisioner...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...


[hidekuro@localhost]~$ docker-machine ls
NAME    ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER    ERRORS
myapp   -        virtualbox   Running   tcp://           v1.11.1
default -        virtualbox   Stopped                                       Unknown

[hidekuro@localhost]~$ docker-machine env myapp
export DOCKER_HOST="tcp://"
export DOCKER_CERT_PATH="C:\develop\.docker\machines\myapp"
export DOCKER_MACHINE_NAME="myapp"
# Run this command to configure your shell:
# eval $("C:\ProgramData\chocolatey\lib\docker-machine\bin\docker-machine.exe" env myapp)



function docker-machine-start() {
  docker-machine start $1

  if (docker-machine env $1 2>&1 | grep -q 'regenerate-certs'); then
    docker-machine -f regenerate-certs $1

マシン起動後に docker-machine env を試し撃ちして、「regenerate-certs」を含むようなエラーが出ていたら証明書を再生成しています。


雑食。私がQiitaで公開する独自コードは、特に記載がない限り CC0 https://creativecommons.org/publicdomain/zero/1.0/deed.ja とします。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away