首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在码头集装箱内运行码头集装箱

在码头集装箱内运行码头集装箱
EN

Stack Overflow用户
提问于 2022-10-03 14:00:32
回答 1查看 107关注 0票数 -1

我已经建立了我的应用程序的对接图像(流光),在我的图像,我有另一个图像,我想运行,因为它是一个搜索引擎在我的应用程序。

我在做这个之前(除了修改应用程序)通过子进程。

代码语言:javascript
复制
filepath = '"C:/Users/k.queenan/Documents/wsearch/docker/search-engine:/home" '
p = subprocess.Popen ('docker run -v' + filepath + 'search-image' , stdout=subprocess.PIPE, stderr=subprocess.PIPE)
p.communicate()

效果很好。我现在收到一个错误,说文件路径无效。我怎样才能在这个被篡改的版本中避开这个问题呢?

EN

回答 1

Stack Overflow用户

发布于 2022-10-03 15:03:54

有一种方法叫做DinD (Docker in Docker),但是它应该用于开发码头本身。

从安全性角度看,它是不安全的,因为父容器需要特权权限。(您还可以通过挂载docker /var/run/docker.sock从容器中控制停靠守护进程本身-但您也需要特权权限-因此它取决于您的用例,但它不建议使用)

使用码头工代替。

一个示例多容器yaml文件(此方法与您的用例完全匹配):

代码语言:javascript
复制
version: "3.7"

services:
  app:
    image: node:12-alpine
    command: sh -c "yarn install && yarn run dev"
    ports:
      - 3000:3000
    working_dir: /app
    volumes:
      - ./:/app
    environment:
      MYSQL_HOST: mysql
      MYSQL_USER: root
      MYSQL_PASSWORD: secret
      MYSQL_DB: todos

  mysql:
    image: mysql:5.7
    volumes:
      - todo-mysql-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_DATABASE: todos

volumes:
  todo-mysql-data:

更新

如果您想从带有python的容器中控制docker主机,可以执行以下操作:

将容器的对接插座映射为(在windows上):

代码语言:javascript
复制
docker run -v "//var/run/docker.sock://var/run/docker.sock" your_python_image

并使用docker.py从容器内部控制对接主机(而不是子进程):

代码语言:javascript
复制
>>> import docker
>>> c = docker.from_env()
>>> stdout = c.containers.run(image="search-image:latest",command="your_command", remove=True)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73936578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档