python - 我尝试使用 exec_run 执行到容器中但不起作用
问题描述
我尝试在一个容器中执行 4 个命令(它有一个 mysql 数据库),但是如果我在另一个终端工作中执行它,但是如果创建一个容器然后执行命令,它就不起作用。我有这段代码:这段代码创建了容器,但不执行命令 1、2、3 和 4。
import docker
from docker.types import Mount
from threading import Thread
client = docker.DockerClient(base_url='unix://var/run/docker.sock')
container= client.containers.run(
"python_base_image:v02",
detach=True,
name='201802750001M04',
ports={'3306/tcp': None, '80/tcp': None},
mounts=
[Mount("/var/lib/mysql","201802750001M04_backup_db",type='volume')]
)
command1 = "sed -i '/bind/s/^/#/g' /etc/mysql/my.cnf"
command2 = "mysql --user="root" --password="temprootpass" --
execute="GRANT ALL PRIVILEGES ON . TO 'macripco'@'172.17.0.1'
IDENTIFIED BY '12345';""
command3 = "mysql --user="root" --password="temprootpass" --
execute="GRANT ALL PRIVILEGES ON . TO 'macripco'@'localhost'
IDENTIFIED BY '12345';""
command4 = "sudo /etc/init.d/mysql restart"
a = container.exec_run(command1,detach=False,stream=True,stderr=True,
stdout=True)
b = container.exec_run(command2,detach=False,stream=True,stderr=True,
stdout=True)
c = container.exec_run(command3,detach=False,stream=True,stderr=True,
stdout=True)
d = container.exec_run(command4,detach=False,stream=True,stderr=True,
stdout=True)`
但是,如果我稍后执行命令(在另一个终端中),一旦创建了容器,就可以了。我需要一起创建和执行命令。
谢谢。
解决方案
那是关于时间执行的问题,在创建容器之后和 exec_run 之前两次执行之间的 time.sleep(10) 解决了这个问题
推荐阅读
- java - 你能解释一下,这些与实例化对象的方式有什么不同吗?
- python - Windows Defender 通过我的 pyinstaller exe 提醒用户
- c++ - SSL 是否执行自动重新协商
- python - 根据预测统一分类器
- laravel - A + B 列的总和值显示在 C 中
- dart - Flutter - 限制小部件以匹配其他小部件高度
- javascript - 如何迭代具有迭代之间延迟的无限动画
- javascript - 基于输出文本在 CSS 中格式化文本
- visual-studio-code - VSCode 智能感知停止使用 js 模块导入
- javascript - 在悬停时更改添加到购物车文本