【发布时间】:2022-01-14 17:30:50
【问题描述】:
我正在使用 python-on-whales 在 mysql docker conatiner 中运行 mysql 命令。
我使用docker.execute从python脚本调用容器内的命令,它返回一个错误:
import mysql.connector
import os
from mysql.connector.errors import DatabaseError
from python_on_whales import docker
envs={"MYSQL_ROOT_PASSWORD":"TempPassword",
"MYSQL_USER":"root",
"MYSQL_ROOT_PASSWORD":"TempPassword"
}
#Start the mysql container
docker.run("mysql/mysql-server",name="test_mysql",
envs=envs,
publish=[(3306,3306)],
detach=True)
#copy scripts to container
docker.copy("./permissions.mysql","test_mysql:/etc/")
docker.copy("./permissions.sh","test_mysql:/etc/")
#try calling permissions.sh on the container
docker.execute("test_mysql", ["/etc/permissions.sh"])
这产生了以下错误:
result = run(full_cmd, tty=tty)
File "/usr/local/lib/python3.9/site-packages/python_on_whales/utils.py", line 150, in run
raise DockerException(
python_on_whales.exceptions.DockerException: The docker command executed was `/usr/local/bin/docker exec test_mysql /etc/permissions.sh`.
It returned with code 1
The content of stdout is ''
The content of stderr is 'mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
在错误 python-on-whales 报告它调用的命令:
/usr/local/bin/docker exec test_mysql /etc/permissions.sh
但是,如果我直接在 bash shell 中发出从 python-on-whales 报告的命令,而不是使用 python-on-whales 命令执行。
谁能解释一下原因?
【问题讨论】:
-
如果您使用
docker run -p ...:3306选项启动数据库以将数据库端口发布到主机,则您不需要在此处执行任何特定于 Docker 的操作。使用普通的 MySQL 客户端库连接到该发布的端口。 -
python-on-whales 的
docker.run(...)命令本质上是在调用docker run -p。
标签: python mysql bash docker python-on-whales