运行 eval 和 $(docker-machine ...) 之前的 docker 之间的区别

Difference between running eval and docker before $(docker-machine ...)

正如标题所说,运行 与 docker-machine 的命令与

之间有什么区别
eval $(docker-machine env mycontainer) 
docker run httpd 

docker $(docker-machine config mycontainer) run httpd

因为两者都在 "mycontainer" ip 下创建了一个 httpd 图像,但是对于第二个,"docker ps"

没有显示容器

在第一种形式中,您首先评估一系列环境变量(DOCKER_HOSTDOCKER_CERT_PATHDOCKER_TLS_VERIFYDOCKER_MACHINE_NAME),它们正在配置您当前的 shell 这样您以后启动的任何 docker 命令都会与同一个 docker 守护进程对话。

在第二种形式中,您将参数 (--tlsverify--tlscacert--tlscert--tlskey-H) 直接传递给 docker 命令。这些最终将覆盖您的环境中已有的值或默认值(即连接到本地守护进程)。

在最近的案例中,如果您想查看刚刚启动的容器以确保您正在与正确的服务器通信,则必须再次使用相同的命令行参数 docker $(docker-machine config mycontainer) ps

总结一下:

  • config更适合单人现场指挥
  • env 在同一台服务器上进行完整会话更方便。