簡體   English   中英

從 Docker 容器運行 Docker

[英]Running Docker from a Docker container

Doing a project for my dissertation which involves an angular frontend which talks to a node API backend which needs to use docker to create containers from images run a few lines of code for the console output.

我已經使用 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 是否在我的主機上正確運行我在 windows 10 上使用 hyper-v。

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 交談。

我不知道這是否適用於所有人,但在我的項目中添加 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 時很好,但是一旦將 docker 移動到 docker 環境中,我總是會得到未定義的,該環境可以通過 using.then 來修復。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM