从Docker容器运行Docker

时间:2019-11-11 11:53:53

标签: docker networking docker-compose docker-machine

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

我已经使用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从docker容器(后端)进行连接时'ReferenceError:docker is not defined',但不确定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对话,对此的任何见解将不胜感激。

1 个答案:

答案 0 :(得分:0)

我不知道这是否对每个人都有效,但在我的项目中添加钱就可以满足我的需求。

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 undefined。