You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

docker run选择Docker daemon规则及外部查看docker-machine容器方法咨询

嘿,这两个问题都是Docker多环境管理里的典型场景,我给你一步步讲明白:

1. docker run 如何决定使用哪个 Docker daemon?

核心逻辑其实是看当前环境中的Docker配置参数,最关键的是这几个点:

  • DOCKER_HOST环境变量:这是决定Docker客户端连接哪个daemon的核心。默认情况下:
    • Windows下用docker-toolbox安装的docker-machine,会自动把DOCKER_HOST设置为虚拟机的TCP地址(比如tcp://192.168.99.100:2376),所以docker run默认连接这个daemon。
    • Linux上原生Docker daemon默认使用Unix套接字unix:///var/run/docker.sock,如果没手动修改环境变量,即使有docker-machine实例在运行,docker run还是会连接本地的原生daemon。
  • 命令行参数-H:你可以直接在docker run命令里指定要连接的daemon地址,比如docker -H tcp://<machine-ip>:2376 run nginx,这会绕过环境变量,直接连接指定的daemon。
  • Docker Context(推荐):新版本Docker提供了docker context命令来管理多个daemon配置。你可以把不同的docker-machine实例配置成不同的context,切换后所有Docker命令都会默认指向对应的daemon。

另外,docker-machine自带的docker-machine env <machine-name>命令会输出切换到该实例所需的环境变量,执行eval $(docker-machine env <machine-name>)就能快速切换daemon上下文,之后docker run就会使用这个实例的daemon了。

2. 无需SSH进入实例,从外部查看docker-machine实例上运行容器的方法?

当然有,而且有几种便捷的方式:

  • 切换环境变量直接用Docker命令:先运行eval $(docker-machine env <你的实例名>),这会把当前终端的Docker客户端配置指向目标docker-machine实例。之后直接用docker psdocker logs <容器ID>docker inspect <容器ID>这些命令,就能查看该实例上的容器状态、日志和详情,完全不用SSH。
  • 用Docker Context管理(更持久):如果不想每次都执行env命令,可以把docker-machine实例配置成一个context:
    docker context create <context名称> --docker "host=tcp://<实例IP>:2376,ca=~/.docker/machine/machines/<实例名>/ca.pem,cert=~/.docker/machine/machines/<实例名>/cert.pem,key=~/.docker/machine/machines/<实例名>/key.pem"
    
    然后执行docker context use <context名称>,之后所有Docker命令默认都会指向这个实例,查看容器就和操作本地daemon一样方便。
  • 直接指定daemon地址和证书参数:如果只是临时查看一次,也可以直接在命令里带上所有必要参数:
    docker --tlsverify \
      --tlscacert=~/.docker/machine/machines/<实例名>/ca.pem \
      --tlscert=~/.docker/machine/machines/<实例名>/cert.pem \
      --tlskey=~/.docker/machine/machines/<实例名>/key.pem \
      -H tcp://<实例IP>:2376 \
      ps
    
    不过这种方式参数较多,适合临时场景,日常用还是前两种更方便。

内容的提问来源于stack exchange,提问作者iTakeshi

火山引擎 最新活动