【问题标题】:Reset Docker Machine to run Docker commands on my local machine重置 Docker 机器以在我的本地机器上运行 Docker 命令
【发布时间】:2017-01-16 21:53:14
【问题描述】:

我现在正在学习 docker,但遇到了一些令人困惑的事情。我开始使用docker-machine,它非常适合创建本地 VM 并在 Digital Ocean 上启动服务器。但是,我现在想返回到 docker 命令在我的本地计算机上执行的状态,以便我可以添加功能、构建和推送我的 docker repo。

我知道如何使用docker-machine env 更改为其他机器,但我如何回到没有活动机器的状态?如果我重新启动 docker 会发生这种情况,但我不想一直重新启动 docker。好像应该有这个命令吧?

澄清一下,我并不想连接到我的default 机器。我希望 docker 命令像我设置 Docker Machine 之前那样在我的机器上执行。

【问题讨论】:

    标签: docker docker-machine


    【解决方案1】:

    eval $(docker-machine env DOCKER_MACHINE_NAME)只会设置一堆环境变量,即:

    • DOCKER_TLS_VERIFY="1"
    • DOCKER_HOST="tcp://X.Y.Z.W:2376"
    • DOCKER_CERT_PATH="/machine/machines/DOCKER_MACHINE_NAME"
    • DOCKER_MACHINE_NAME="DOCKER_MACHINE_NAME"

    然后当您使用这些设置运行“docker”时,它会识别它们并连接到远程机器。

    所以你需要做的是取消设置它们,或者只是退出你当前的 shell 会话。

    使用新的 shell 会话

    您可以采取的最简单的方法可能是在调用 docker-machine env 之前启动一个新的 shell,这样这些变量只会在其中设置。

    #start a new shell
    bash 
    
    #configure docker to connect to the remote machine
    eval $(docker-machine env DOCKER_MACHINE_NAME)
    
    #run some commands against the remote docker machine
    docker ps
    ...
    
    #once, done, return to the parent shell
    exit
    
    #run some commands against your local docker daemon
    docker ps
    ...
    

    重置DOCKER变量(在你当前的shell中)

    或者,您可以直接重置它们,而不退出当前的 shell,如下所示:

    unset `env|grep DOCKER|cut -d\= -f1`
    

    或对“env”使用“--unset”选项(因为@thaJeztah 已经有pointed out

    eval "$(docker-machine env -u)"
    

    这也记录在 docker-machine manual

    使用包装脚本

    如果你只需要偶尔对远程机器运行 docker 命令,你可以使用一个简单的包装脚本,如下所示:

    #!/bin/bash
    DOCKER_MACHINE=$1
    shift
    
    if [ -z "$DOCKER_MACHINE" ] 
    then
        echo "Usage: rdocker DOCKER_MACHINE COMMAND"
        exit 1
    fi
    
    eval $(docker-machine env "$DOCKER_MACHINE")
    docker "${@}"
    

    然后可以这样调用:

    ./rdocker my_machine ps
    

    获取在 my_machine 上运行的容器列表(或执行任何其他 Docker 命令),而不会干扰您当前的 shell 会话。


    旁注

    要检查当前活动的 DOCKER_ 变量集,只需执行以下操作:

    env|grep DOCKER
    

    【讨论】:

    • 使用新的外壳正是我想要的。我可能应该自己意识到这一点。这绝对是最好的工作流程。 eval "$(docker-machine env -u)" 如果我意外地在 shell 之外运行 docker machine 会很有用,但我认为这是一种解决方法而不是修复方法。谢谢!
    【解决方案2】:

    取消docker-machine设置的环境变量,请按照docker-machine env --unset选项打印的说明进行操作;

    unset DOCKER_TLS_VERIFY
    unset DOCKER_HOST
    unset DOCKER_CERT_PATH
    unset DOCKER_MACHINE_NAME
    unset DOCKER_API_VERSION
    # Run this command to configure your shell: 
    # eval $(docker-machine env --unset)
    

    所以运行 eval $(docker-machine env --unset) 应该取消设置 docker-machine 设置的所有环境变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-28
      • 2019-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-26
      相关资源
      最近更新 更多