【问题标题】:Running Docker from a Docker container从 Docker 容器运行 Docker
【发布时间】:2019-11-11 11:53:53
【问题描述】:

为我的论文做一个项目,该项目涉及一个角度前端,该前端与需要使用 docker 从图像创建容器的节点 API 后端通信,运行几行代码用于控制台输出。

我使用 docker-compose 为我的前端和后端创建了两个 docker 容器。

我的后端 (api) 容器需要一种使用 dockerode 连接到 docker 的方法,但我不知道该怎么做。

version: "3"
services:
  app:
    build: ./frontend
    ports:
      - "3001:4200"
    volumes:
      - ./frontend:/code
    depends_on:
      - api
  api:
    build: ./backend
    ports:
      - "3000:8080"
    volumes:
      - ./backend:/code

我试过了:

1 在我的主机(Windows 10)上使用 docker-machine,但每当我尝试通过 dockerode'ReferenceError: docker is not defined' 从 docker 容器(后端)连接时,但我不确定 docker-machine 是否正常运行在我的主机上,就像我在使用 hyper-v 的 Windows 10 上一样。

const docker = new Docker({host: 'http://192.168.0.23', port: 3000});

2 将 docker 安装到每次都失败的 docker 容器中,成功安装后,它不会识别 'docker' 在系统上运行。

3 将 docker 映像添加到 docker-compose 文件中,我认为这可行吗?对我来说,不,但不知道这是否是因为网络不是 docker 图像的预期用途

  docker:
   image: docker
   ports: 
    - "2376:2376"
   stdin_open: true
   tty: true
   volumes:
    - /var/run/docker.sock:/var/run/docker.sock

我对 docker 非常陌生,尤其是网络方面,并且一直在研究诸如 docker-machine、docker-swarm 和 Kubernetes 之类的东西以找到最佳解决方案。

任何对此的见解将不胜感激,因为该项目的最大障碍是让我的后端 API 在已部署的环境中与 docker 对话。

【问题讨论】:

  • 您的问题不清楚,但我认为您需要docker:dind 图像。 github.com/docker-library/docker/blob/…
  • 关于这个问题我有什么可以澄清的吗?我尝试将 dind 图像添加到我的 docker 作曲家,但仍然得到“docker is undefined”。我将其添加为“docker”公开端口 2376,并尝试使用 Docker({host: 'docker', port: 2376}); 从我的 API 连接
  • 无法连接Docker是什么意思?您是否尝试在另一个容器中运行您的前端和后端图像?
  • iv 更新了我的问题,包括我的 docker-compose.yml 和上面的更多细节。简而言之,我想以某种方式使用 dockerode 将我的后端容器连接到 docker。

标签: docker networking docker-compose docker-machine


【解决方案1】:

我不知道这是否适用于所有人,但在我的项目中添加 dind 可以满足我的需要。

docker-in-docker:
  image: docker:dind
  environment:
    DOCKER_TLS_CERTDIR: ""
  privileged: true
  volumes:
    - /var/lib/docker
  expose:
    - 2375
    - 2376

对于 docker-compose 中将连接到“docker-in-docker”的任何容器,在他们的服务中都需要这个。 “DOCKER_TLS_CERTDIR”是删除 TLS

  links:
    - docker-in-docker
  environment:
    DOCKER_HOST: http://docker-in-docker:2375
    DOCKER_TLS_CERTDIR: ""

对于使用 dockerode 的任何人的另一个注意事项,当仅在我的本地上使用 async 和 await 时很好,但一旦将其移动到可以通过使用 .then 修复的 docker 环境,我总是会得到 docker 未定义。

【讨论】:

    猜你喜欢
    • 2022-10-04
    • 2019-01-19
    • 2021-12-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-05
    • 1970-01-01
    • 2017-02-21
    • 2015-06-18
    相关资源
    最近更新 更多