docker - 重置Docker Machine以在我的本地计算机上运行Docker命令

标签 docker docker-machine

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

我知道如何使用docker-machine env更改为其他计算机,但是如何回到没有 Activity 计算机的状态?如果我重新启动Docker,则会发生这种情况,但我不想一直都在重新启动docker。似乎应该为此命令?

只是为了澄清,我没有尝试连接到default机器。我希望Docker命令像在我设置Docker Machine之前一样在我的计算机上执行。

最佳答案

进行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 session 。

    使用一个新的shell session

    您可能采取的最简单的方法是在调用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`
    

    或使用“--unset”选项设置为“env”(因为@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 session 。

    旁注

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

    env|grep DOCKER
    

    关于docker - 重置Docker Machine以在我的本地计算机上运行Docker命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41685603/

    相关文章:

    docker compose 覆盖端口属性而不是合并它

    docker - 无法连接到主机中的minikube服务

    ruby-on-rails - Docker无法在rspec测试目录中看到更新的夹具CSV

    php - 我无法使用 docker-machine 和 docker-compose 运行 LEMP

    Docker 主机未运行

    docker - 使用Mac的Docker安装Hyperledger依赖于结构的二进制文件

    postgresql - Docker-compose:应用程序容器无法连接到 Postgres

    docker - 在docker容器中运行jenkins代理,jenkins管道和/var/run/docker.socket出现问题

    由于 'Couldn' t read CA cert' 错误,docker-machine 安装失败

    laravel - 运行 curl 命令以创建新的 Laravel 项目时,Docker 未运行