首页 > 解决方案 > 将 Docker 命令添加到我的 Docker 容器中

问题描述

我有一个人们已经讨论过的问题,但没有到这个程度。

我正在制作一个 Docker Swarm 健康检查器,它会定期发布我环境中 Docker 节点的健康状况。我遇到了如何从容器中运行我的 Docker 命令的问题。我找到了一个帖子,您可以在其中运行此命令:

docker run -it -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker image_name bash

它会像我想要的那样工作。问题是我希望它在一个从堆栈中的文件运行的容器中。我已经尝试了所有的卷安装组合。这是我最近做的,但仍然没有用。我是否错过了将 Docker 放入我的容器的明显步骤?

service_name:
  image: imaged_name
  volumes:
    - sock-docker:/var/run/docker.sock
    - bin-docker:/usr/bin/docker
  deploy:
    placement:
      constraints:
        - node.role == manager
    restart_policy:
      condition: any
      delay: 10s
      max_attempts: 50
      window: 600s
volumes:
  sock-docker:
    external:
      name: /var/run/docker.sock
  bin-docker:
    external:
      name: usr/bin/docker

标签: dockerdocker-composedocker-stack

解决方案


一些想法:

  1. 我不知道v /usr/bin/docker:/usr/bin/docker像你一样安装。它显然对你有用,但我的习惯是使用https://hub.docker.com/_/docker/. 我怀疑我的方法更好,但我真的不知道。无论如何,我不会对你问题的这方面做进一步评论。
  2. 我认为您需要在 YAML 文件中替换- sock-docker:/var/run/docker.sock为。- /var/run/docker.sock:/var/run/docker.sockYAML 文件中的顶级卷不是指卷挂载而不是绑定挂载吗?(我不知道。)
  3. swarm 建议我分发。在节点上运行的 Docker 套接字可能/可能与为 swarm 服务的 Docker 套接字相同。您可以使用ENV DOCKER_HOST=tcp://.... DOCKER_HOST 可以在另一台机器上。

推荐阅读