为我的论文做一个项目,其中涉及一个有角度的前端,该前端与一个节点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对话,对此的任何见解将不胜感激。
答案 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。