运行 Docker 来自 Docker 容器
Running Docker from a Docker container
为我的论文做一个项目,其中涉及一个 angular 前端,它与一个节点 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 在我的主机上使用 docker-machine (windows 10) 但每当我尝试通过 dockerode 从 docker 容器(后端)连接时 'ReferenceError: docker is not defined' 但我不确定 docker-machine 在我的主机上 运行 是否正确,因为我在 windows 10 使用 hyper-v.
const docker = new Docker({host: 'http://192.168.0.23', port: 3000});
2 将 docker 安装到 docker 容器中,但每次都失败,当成功安装时,它不会在系统上将 'docker' 识别为 运行ning。
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 交谈。
我不知道这是否适用于所有人,但将 dind 添加到我的项目中可以满足我的需要。
docker-in-docker:
image: docker:dind
environment:
DOCKER_TLS_CERTDIR: ""
privileged: true
volumes:
- /var/lib/docker
expose:
- 2375
- 2376
并且对于 docker 中的任何容器,将连接到 "docker-in-docker" 的 compose 在他们的服务中需要这个。 "DOCKER_TLS_CERTDIR" 是删除 TLS
links:
- docker-in-docker
environment:
DOCKER_HOST: http://docker-in-docker:2375
DOCKER_TLS_CERTDIR: ""
给任何使用 dockerode 的人的另一个注意事项,当在我的本地使用 async & await 时很好,但是一旦将它移动到 docker 我总是会得到 docker is undefined可以通过使用 .then 来修复的环境。
为我的论文做一个项目,其中涉及一个 angular 前端,它与一个节点 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 在我的主机上使用 docker-machine (windows 10) 但每当我尝试通过 dockerode 从 docker 容器(后端)连接时 'ReferenceError: docker is not defined' 但我不确定 docker-machine 在我的主机上 运行 是否正确,因为我在 windows 10 使用 hyper-v.
const docker = new Docker({host: 'http://192.168.0.23', port: 3000});
2 将 docker 安装到 docker 容器中,但每次都失败,当成功安装时,它不会在系统上将 'docker' 识别为 运行ning。
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 交谈。
我不知道这是否适用于所有人,但将 dind 添加到我的项目中可以满足我的需要。
docker-in-docker:
image: docker:dind
environment:
DOCKER_TLS_CERTDIR: ""
privileged: true
volumes:
- /var/lib/docker
expose:
- 2375
- 2376
并且对于 docker 中的任何容器,将连接到 "docker-in-docker" 的 compose 在他们的服务中需要这个。 "DOCKER_TLS_CERTDIR" 是删除 TLS
links:
- docker-in-docker
environment:
DOCKER_HOST: http://docker-in-docker:2375
DOCKER_TLS_CERTDIR: ""
给任何使用 dockerode 的人的另一个注意事项,当在我的本地使用 async & await 时很好,但是一旦将它移动到 docker 我总是会得到 docker is undefined可以通过使用 .then 来修复的环境。