我已经建立了我的应用程序的对接图像(流光),在我的图像,我有另一个图像,我想运行,因为它是一个搜索引擎在我的应用程序。
我在做这个之前(除了修改应用程序)通过子进程。
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()效果很好。我现在收到一个错误,说文件路径无效。我怎样才能在这个被篡改的版本中避开这个问题呢?
发布于 2022-10-03 15:03:54
有一种方法叫做DinD (Docker in Docker),但是它应该用于开发码头本身。
从安全性角度看,它是不安全的,因为父容器需要特权权限。(您还可以通过挂载docker /var/run/docker.sock从容器中控制停靠守护进程本身-但您也需要特权权限-因此它取决于您的用例,但它不建议使用)
使用码头工代替。
一个示例多容器yaml文件(此方法与您的用例完全匹配):
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上):
docker run -v "//var/run/docker.sock://var/run/docker.sock" your_python_image并使用docker.py从容器内部控制对接主机(而不是子进程):
>>> import docker
>>> c = docker.from_env()
>>> stdout = c.containers.run(image="search-image:latest",command="your_command", remove=True)https://stackoverflow.com/questions/73936578
复制相似问题