mysql - 为什么某些docker exec命令不能始终在批处理文件中工作?

标签 mysql docker powershell batch-file command-line

我可以运行docker exec命令,在PowerShell中调用mysql可以:

docker exec -it my_container_name mysql -e "source my-query.sql" -uroot -pMyRootPassword
容器正在运行,sql文件在那里,查询成功运行。
但是,当我将完全相同的命令复制并粘贴到包含其他一些docker命令的.bat批处理文件中并运行它(通过PowerShell)时,我收到一条错误消息“无法通过套接字连接到本地MySQL服务器”。如果我将其放入单独的批处理文件中并单独运行,则可以正常运行。
这里有一个类似的问题-https://forums.docker.com/t/run-docker-exec-command-from-batch-file-in-windows-10/48163-没有答案。
详细信息:
我完整的批处理文件(简化后)如下所示:
set "container=my_container_name"
set "mysqlRootPassword=MyRootPassword"
docker stop %container%
docker rm %container%
docker run --name=%container% --env="MYSQL_ROOT_PASSWORD=%mysqlRootPassword%" --detach mariadb:10.5.6
docker exec -it %container% mysql -e "show databases;" -uroot -p%mysqlRootPassword%
运行时给出错误:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/run/mysqld/mysqld.sock' (2)exec上方的所有内容运行正常。
现在,如果以后我在单独的批处理文件中运行完全相同的exec命令...
set "container=my_container_name"
set "mysqlRootPassword=MyRootPassword"
docker exec -it %container% mysql -e "show databases;" -uroot -p%mysqlRootPassword%
...然后连接正常,SQL命令运行正常,并按预期显示数据库。

最佳答案

嗯,看来这可能是时间问题。可能在容器完全旋转之前尝试执行到容器中。尝试在exec之前添加一个sleep语句。

关于mysql - 为什么某些docker exec命令不能始终在批处理文件中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64596491/

相关文章:

performance - Docker会给RAM额外的里程吗?

powershell - 使用通配符通过 Invoke-WebRequest 下载文件

c# - 在 C# 中交换 Powershell

powershell - HDInsight powershell 作业提交无法使用流式 C# 作业定义自定义 libjar

sql-server - MS SQL Server Docker数据位置

docker - 在没有 Docker 的情况下运行 Hasura

MySQL 查询返回按一个字段分组的表的所有字段,但仅在该分组在另一个字段中具有多个值的情况下返回

mysql - xml size is exceed capacity of MySQL "extractvalue"function ,我该如何解决这个问题?

mysql - MySQL DB 中列名中的连字符

MySQL 强制对两列进行数据检查的约束