Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 为什么某些docker exec命令不总是在批处理文件中工作?_Mysql_Docker_Powershell_Batch File_Command Line - Fatal编程技术网

Mysql 为什么某些docker exec命令不总是在批处理文件中工作?

Mysql 为什么某些docker exec命令不总是在批处理文件中工作?,mysql,docker,powershell,batch-file,command-line,Mysql,Docker,Powershell,Batch File,Command Line,我可以在PowerShell中运行调用mysql fine的docker exec命令: docker exec -it my_container_name mysql -e "source my-query.sql" -uroot -pMyRootPassword 容器正在运行,sql文件在那里,并且查询成功运行 但是,当我将完全相同的命令复制并粘贴到包含其他docker命令的.bat批处理文件中,并通过PowerShell运行它时,我会收到一条错误消息:无法通过套接字连

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

docker exec -it my_container_name mysql -e "source my-query.sql" -uroot -pMyRootPassword
容器正在运行,sql文件在那里,并且查询成功运行

但是,当我将完全相同的命令复制并粘贴到包含其他docker命令的.bat批处理文件中,并通过PowerShell运行它时,我会收到一条错误消息:无法通过套接字连接到本地MySQL服务器。如果我把它放在一个单独的批处理文件中,并单独运行它,它就可以正常工作

这里有一个类似的问题——没有答案

更多详情:

我的完整批处理文件简化如下:

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:无法通过套接字“/run/mysqld/mysqld.sock”2连接到本地MySQL服务器。执行器上面的一切都正常运行

现在,如果我在单独的批处理文件中运行完全相同的exec命令

set "container=my_container_name"
set "mysqlRootPassword=MyRootPassword"
docker exec -it %container% mysql -e "show databases;" -uroot -p%mysqlRootPassword%

…然后它连接良好,SQL命令工作正常,并按预期显示数据库。

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

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

PowerShellGuy正确地认为这是一个时间问题。显然,仅仅因为docker容器已启动并运行,并不意味着数据库已准备好进行连接。我通过添加一个等待和检查连接的循环来解决这个问题。也许有更好的方法,但它在短期内解决了我的问题

设置容器=我的容器名称 设置mysqlRootPassword=MyRootPassword 码头工人停止%container% 码头工人rm%集装箱% docker运行-name=%container%-env=MYSQL\u ROOT\u PASSWORD=%mysqlRootPassword%-10.5.6 12 3 4 5 6 7中的%%i^ 做 docker exec-it%容器%mysql-e显示数据库-uroot-p%mysqlRootPassword%&GOTO:connected | | @echo正在重试%%i。。。 超时2 @回声超时 出口 :已连接 docker exec-it%container%mysql-e source my-query.sql-uroot-p%mysqlRootPassword%
PowerShellGuy是正确的,它最终成为了一个时间问题。显然,仅仅因为docker容器已启动并运行,并不意味着数据库已准备好进行连接。我通过添加一个等待和检查连接的循环来解决这个问题。也许有更好的方法,但它在短期内解决了我的问题

设置容器=我的容器名称 设置mysqlRootPassword=MyRootPassword 码头工人停止%container% 码头工人rm%集装箱% docker运行-name=%container%-env=MYSQL\u ROOT\u PASSWORD=%mysqlRootPassword%-10.5.6 12 3 4 5 6 7中的%%i^ 做 docker exec-it%容器%mysql-e显示数据库-uroot-p%mysqlRootPassword%&GOTO:connected | | @echo正在重试%%i。。。 超时2 @回声超时 出口 :已连接 docker exec-it%container%mysql-e source my-query.sql-uroot-p%mysqlRootPassword%
您的套接字不可用,请尝试-h127.0.0.1,以便mysql被迫使用tcp/ip@nbk-使用-h127.0.0.1会出现类似错误:错误2002 HY000:无法连接到“127.0.0.1”115上的MySQL服务器当您启动命令时docker尚未启动,如@PowerShellGuy,在docker运行后添加暂停。。。排队等待几秒钟,然后按enter键。如果可以的话,你可以用一些睡眠命令来代替暂停。如果你的套接字不可用,试试-h127.0.0.1,这样mysql就会被迫使用tcp/ip@nbk-使用-h127.0.0.1会出现类似的错误:错误2002 HY000:无法连接到“127.0.0.1”115上的MySQL服务器。当您启动命令时,docker尚未启动,如@PowerShellGuy,在docker运行后添加暂停。。。排队等待几秒钟,然后按enter键。如果有效,您可以使用一些sleep命令替换暂停