【问题标题】:Execute command in linked docker container在链接的 docker 容器中执行命令
【发布时间】:2015-04-27 23:58:13
【问题描述】:

有没有办法从链接的 docker 容器中的一个 docker 容器中执行命令? 我不想从主机执行命令。

【问题讨论】:

标签: docker


【解决方案1】:

只要您可以访问容器中的 docker 套接字之类的东西,您就可以在任何 docker 容器中运行任何命令,无论它是否已链接。例如:

# run a container and link it to `other`
docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock \
           --link other:other myimage bash -l
bash$ docker exec --it other echo hello

即使没有指定链接也可以使用。

【讨论】:

  • 这样做允许容器中运行的任何东西控制主机。
  • @ChrisPitman 是的,显然容器就像任何其他二进制文件一样,不要运行你不信任的东西。我认为这没有任何关系。
  • “小心你运行的东西”和“我们实现了一个微不足道的容器逃逸漏洞”是有区别的。这相当于允许用户匿名 ssh 访问您的服务器,因为未经授权的任何人都不应访问您的网络。
  • 这是一种常见的做法,甚至得到 docker 工程师的认可:nathanleclaire.com/blog/2014/07/12/…
  • 这种方法有问题。通过在容器上安装 docker 套接字,容器将立即看到来自其他容器的所有暴露端口(与主机相同),这对于 dockerize 和 wait-for-it 这样的事情并不理想,因为您失去了等待的能力端口“准备好”。
【解决方案2】:

使用 docker-compose

version: '2.1'

services:

  site:
    image: ubuntu
    container_name: test-site
    command: sleep 999999

  dkr:
    image: docker
    privileged: true
    working_dir: "/dkr"
    volumes:
      - ".:/dkr"
      - "/var/run/docker.sock:/var/run/docker.sock"
    command: docker ps -a

那就试试吧:

docker-compose up -d site
docker-compose up dkr

结果:

Attaching to tmp_dkr_1
dkr_1   | CONTAINER ID        IMAGE                             COMMAND                  CREATED                  STATUS                   PORTS                     NAMES
dkr_1   | 25e382142b2e        docker                            "docker-entrypoint..."   Less than a second ago   Up Less than a second                              tmp_dkr_1

示例项目

https://github.com/reduardo7/docker-container-access

【讨论】:

    【解决方案3】:

    正如“Abdullah Jibaly”所说,您可以这样做,但您必须考虑一些安全问题,还有sdk docker 可以使用,python 应用程序可以使用Docker SDK for Python

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-06
      • 2017-01-07
      • 1970-01-01
      • 1970-01-01
      • 2021-12-06
      • 2015-10-21
      相关资源
      最近更新 更多