python - 我尝试使用 exec_run 执行到容器中但不起作用

标签 python mysql dockerpy

我尝试在一个容器(它有一个 mysql 数据库)中执行 4 个命令,但是如果我在另一个终端工作中执行它,但是如果创建一个容器然后执行命令,它就不起作用。我有这段代码: 此代码创建容器但不执行命令 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) 解决了这个问题

关于python - 我尝试使用 exec_run 执行到容器中但不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51585732/

相关文章:

java - 从 Java 重新训练 Tensorflow inception v3 网络

python - 使用 pandas.read_csv 索引 DataFrame pandas

php - 无法使用 php 代码从数据库获取最大(数学)结果

MySQL 一对多关系将值从一个表添加到另一个表

python - 在Python程序中使用Linux环境变量

python - Docker.py 如何使用 stdin_open=True 停止容器?

python - 寻找断开边缘的最小路径的快速算法

python - 如何在 Python 3 中解码类似 unicode 的字符串?

php - 我可以使用 url 通过浏览器查看我的工作台应用程序,就像我用于 phpmyadmin 一样