Docker登录到容器

Docker登录到容器,docker,Docker,我是Docker的新用户。我面临的第一个问题是登录到容器 我找到了通过以下方式执行容器bash命令的解决方案 docker exec -it ID bash 但是,此解决方案仅适用于安装/删除软件包。如果我想在docker容器中编辑nginx配置,应该使用什么 其中一个解决方案可以是通过ssh连接登录到容器,但是可能Docker有自己的解决方案吗?我的意思是不安装OpenSSH就可以轻松访问 正如你所说 docker exec-it容器\u id bash 然后使用您喜爱的编辑器编辑任何ngi

我是
Docker
的新用户。我面临的第一个问题是登录到容器

我找到了通过以下方式执行容器bash命令的解决方案

docker exec -it ID bash
但是,此解决方案仅适用于安装/删除软件包。如果我想在docker容器中编辑nginx配置,应该使用什么

其中一个解决方案可以是通过ssh连接登录到容器,但是可能
Docker
有自己的解决方案吗?我的意思是不安装
OpenSSH
就可以轻松访问

正如你所说

docker exec-it容器\u id bash

然后使用您喜爱的编辑器编辑任何nginx配置文件。通常会安装vi或nano,但如果这是您最喜欢的编辑器,则可能需要安装emacs或vim

如果只有几个字符需要修改

docker exec container\u id sed…

也许能胜任。如果您想在容器中使用SSH,则需要安装SSH并处理SSH密钥,我不确定这是您需要的。

正如您所说

docker exec-it容器\u id bash

然后使用您喜爱的编辑器编辑任何nginx配置文件。通常会安装vi或nano,但如果这是您最喜欢的编辑器,则可能需要安装emacs或vim

如果只有几个字符需要修改

docker exec container\u id sed…


也许能胜任。如果您想在容器中使用SSH,则需要安装SSH并处理SSH密钥,我不确定这是否是您所需要的。

您做得不对。您应该很少需要登录到容器来编辑文件

相反,从主机装载带有
-v
nginx.conf
。这样,您可以使用普通编辑器编辑文件。一旦配置按您想要的方式工作,您就可以使用它构建一个新的映像


一般来说,您必须进入容器是短暂的思维模式。你不会修补它们;你把它们扔掉,换成固定版本。

你走错了路。您应该很少需要登录到容器来编辑文件

相反,从主机装载带有
-v
nginx.conf
。这样,您可以使用普通编辑器编辑文件。一旦配置按您想要的方式工作,您就可以使用它构建一个新的映像

一般来说,您必须进入容器是短暂的思维模式。你不会修补它们;你把它们扔掉,换成固定版本

如何:Docker登录到容器

是的,你可以。您可以登录正在运行的容器

Exist
docker exec
docker attach
不够好。想在Docker容器中启动一个shell吗?解决方案是:使用两个命令:
nsenter
docker-enter

如果您在Linux环境中,请运行以下命令: 如果您是mac或windows用户,请使用工具箱运行摘要: 如果您是mac或windows用户,请使用boot2docker运行docket: 注意:命令
dockerrun--rm-v/usr/local/bin:/target-jpetazzo/nsenter
只需运行一次

如何:编辑nginx配置

对于第二个问题,您可以考虑Docker中的
ONBUILD

ONBUILD COPY nginx.conf /etc/nginx/nginx.conf
使用此解决方案,您可以:

  • 在本地编辑
    nginx.conf
    ,您可以使用任何现有编辑器

  • 不必每次更改nginx配置后都构建映像

  • 每次在本地更改
    nginx.conf
    文件后,需要停止、删除并重新运行containe,新的
    nginx.conf
    文件将在
    docker run
    命令时部署到container中

  • 您可以在此处参考有关如何使用
    ONBUILD
    的详细信息:

    如何:Docker登录到容器

    是的,你可以。您可以登录正在运行的容器

    Exist
    docker exec
    docker attach
    不够好。想在Docker容器中启动一个shell吗?解决方案是:使用两个命令:
    nsenter
    docker-enter

    如果您在Linux环境中,请运行以下命令: 如果您是mac或windows用户,请使用工具箱运行摘要: 如果您是mac或windows用户,请使用boot2docker运行docket: 注意:命令
    dockerrun--rm-v/usr/local/bin:/target-jpetazzo/nsenter
    只需运行一次

    如何:编辑nginx配置

    对于第二个问题,您可以考虑Docker中的
    ONBUILD

    ONBUILD COPY nginx.conf /etc/nginx/nginx.conf
    
    使用此解决方案,您可以:

  • 在本地编辑
    nginx.conf
    ,您可以使用任何现有编辑器

  • 不必每次更改nginx配置后都构建映像

  • 每次在本地更改
    nginx.conf
    文件后,需要停止、删除并重新运行containe,新的
    nginx.conf
    文件将在
    docker run
    命令时部署到container中


  • 您可以在此处参考如何使用
    ONBUILD
    的详细信息:

    docker exec有什么问题?@AdrianMouat,我运行
    docker exec
    ,但有时只有空白窗口,有时直接注销。对于
    nsenter
    ,我没有这个问题。我在docker exec方面几乎没有问题,除非必要,否则建议不要使用额外的nsenter复杂性。我从未见过“空白窗口”(我不确定这是什么意思),但听起来像个bug。@AdrianMouat不错,也许你可以帮助解决这个问题:
    docker run-d-p 10086:10086-v/var/run/docker.sock:/var/run/docker.sock tobegit3hub/seagull
    ,然后
    docker exec d57eb761985b sh
    。你能登录这个容器吗?@AdrianMouat关于你的书使用Docker,如果你能将它作为电子书(如pdf)出版,并像Docker的书那样不断更新,我将首先购买这本书。我
    docker-machine ssh default
    docker run --rm -v /usr/local/bin:/target jpetazzo/nsenter
    PID=$(docker inspect --format {{.State.Pid}} 0e8c248982c5)
    sudo nsenter --target $PID --mount --uts --ipc --net --pid
    
    boot2docker ssh
    docker run --rm -v /usr/local/bin:/target jpetazzo/nsenter
    PID=$(docker inspect --format {{.State.Pid}} 0e8c248982c5)
    sudo nsenter --target $PID --mount --uts --ipc --net --pid
    
    ONBUILD COPY nginx.conf /etc/nginx/nginx.conf