【问题标题】:Restart container from inside从内部重新启动容器
【发布时间】:2020-05-28 18:07:26
【问题描述】:

在批处理作业中,我正在执行大量操作 在码头内。

是否可以从内部发送命令所以 docker 能像刚开始一样回来吗?

【问题讨论】:

  • 你能解释一下你想要达到的目标/为什么需要这个吗?
  • 通常情况下,我的 python 应用打开了太多的 tcp 端口、RAM 分配……只是想从初始状态重置。
  • 我的解决方案是使用信号来触发应用程序重新加载。
  • 如果应用程序吃掉所有 dockerressources 怎么办

标签: docker centos


【解决方案1】:

您只需要在构建 docker 镜像时安装 docker 客户端并在运行新容器时映射 /var/run/docker.sock 以启用容器内的 docker 客户端以连接主机上的 docker daemon,然后您可以使用 docker 命令喜欢在主机上。

首先,在Dockerfile 中添加安装 docker-ce 的命令:

FROM centos:7.8.2003

ENV DOCKER_VERSION='19.03.8'

RUN set -ex \
    && DOCKER_FILENAME=https://download.docker.com/linux/static/stable/x86_64/docker-${DOCKER_VERSION}.tgz \
    && curl -L ${DOCKER_FILENAME} | tar -C /usr/bin/ -xzf - --strip-components 1 docker/docker

然后,构建一个新镜像并使用它运行一个新容器:

$ docker build --tag docker-in-docker:v1 .
$ docker run -dit \
             --name docker-in-docker \
             -v /var/run/docker.sock:/var/run/docker.sock:ro \
             docker-in-docker:v1 bash

现在,您可以在 docker 容器内操作 docker-daemon(在主机上)。

$ docker exec -it docker-in-docker docker ps
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS               NAMES
bdc2d81b2227        docker-in-docker:v1   "bash"                   8 seconds ago       Up 7 seconds                            docker-in-docker
# just restart the container docker-in-docker in the container docker-in-docker:
$ docker exec docker-in-docker docker restart docker-in-docker

【讨论】:

  • 这种方法可行,并且在某些情况下可能是合适的。但是,它将失去容器的所有安全隔离,并且本质上赋予它对整个主机的 root 访问权限(包括访问任何东西,包括在其上运行的容器)。
  • 请解释一下,为什么 docker 客户端只有对 docker.sock 的只读权限才能对 docker 主机进行写访问?
  • @Mikl 在大多数产品环境中,您不应该这样做。您暴露了很多信息,并且可能通过一些知识,攻击者仍然能够通过它获得 root 访问权限。攻击者还可以启动新容器并将您的机器用于僵尸网络;)raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock
【解决方案2】:

reboot 命令适用于 withing 容器。 我在 docker 内的 Go 代码中使用它

out, err = exec.Command("reboot").Output()

【讨论】:

  • 这只会杀死容器。你必须使用外部调度让它真正回来
猜你喜欢
  • 1970-01-01
  • 2016-01-31
  • 2019-10-28
  • 1970-01-01
  • 1970-01-01
  • 2018-08-28
  • 2020-01-21
  • 2020-02-13
  • 1970-01-01
相关资源
最近更新 更多