Mysql 借助docker容器中的Bash脚本执行命令

Mysql 借助docker容器中的Bash脚本执行命令,mysql,bash,docker,shell,containers,Mysql,Bash,Docker,Shell,Containers,我从事一个项目,需要自动安装服务器。 服务器与我在GitHub上获得的存储库一起工作,然后启动服务使服务器工作 由于我的bash脚本,我获得了所有存储库,我启动了container,但在这之后,我在恢复mysql数据库时遇到了一个问题: 我需要在容器上执行一些命令,因此我将自己连接到容器,如下所示: docker exec-ti{my_container_name}sh 当我的脚本执行此命令时,将打开一个shell,我可以键入其余命令,当我键入exit时,将执行以下其余命令: cd /var/l

我从事一个项目,需要自动安装服务器。 服务器与我在GitHub上获得的存储库一起工作,然后启动服务使服务器工作

由于我的bash脚本,我获得了所有存储库,我启动了container,但在这之后,我在恢复mysql数据库时遇到了一个问题:

我需要在容器上执行一些命令,因此我将自己连接到容器,如下所示:

docker exec-ti{my_container_name}sh

当我的脚本执行此命令时,将打开一个shell,我可以键入其余命令,当我键入exit时,将执行以下其余命令:

cd /var/lib/mysql/restore

echo 'CREATE DATABASE apik;USE apik;' | cat - apik.db.sql > temp && mv temp apik.db.sql
mysql --user=root --password=$MYSQL_ROOT_PASSWORD < apik.db.sql

echo 'CREATE DATABASE apik_data;USE apik_data;' | cat - apik_data.db.sql > temp && mv temp apik_data.db.sql
mysql --user=root --password=$MYSQL_ROOT_PASSWORD < apik_data.db.sql

echo 'USE apik;' | cat - apik.data.sql > temp && mv temp apik.data.sql

mysql --user=root --password=$MYSQL_ROOT_PASSWORD < apik.data.sql
exit
我们可以在我的屏幕上看到,当我的脚本执行docker exec命令时,一个shell打开,我的脚本暂停。当我退出这个shell时,命令的其余部分是exec。但是我希望命令在shell打开时执行。 您可以尝试以下方法:

git clone git@bitbucket.org:api-k/mysql-data.git ${APIK_ROOT_DIRECTORY}/data/mysql/restore

docker exec -ti mysql_mysql_1 sh << 'EOF'
cd /var/lib/mysql/restore

echo 'CREATE DATABASE apik;USE apik;' | cat - apik.db.sql > temp && mv temp apik.db.sql
mysql --user=root --password=$MYSQL_ROOT_PASSWORD < apik.db.sql

echo 'CREATE DATABASE apik_data;USE apik_data;' | cat - apik_data.db.sql > temp && mv temp apik_data.db.sql
mysql --user=root --password=$MYSQL_ROOT_PASSWORD < apik_data.db.sql

echo 'USE apik;' | cat - apik.data.sql > temp && mv temp apik.data.sql
mysql --user=root --password=$MYSQL_ROOT_PASSWORD < apik.data.sql
EOF
git克隆git@bitbucket.org:api-k/mysql-data.git${APIK_ROOT_DIRECTORY}/data/mysql/restore
docker exec-ti mysql\u mysql\u 1 sh temp和mv temp apik.db.sql
mysql--user=root--password=$mysql\u root\u passwordtemp&mv temp-apik_data.db.sql
mysql--user=root--password=$mysql\u root\u passwordtemp&mv temp-apik.data.sql
mysql--user=root--password=$mysql\u root\u password
运行容器时,使用-v创建从主机到docker容器的映射驱动器,然后从容器中的映射驱动器运行脚本
git clone git@bitbucket.org:api-k/mysql-data.git ${APIK_ROOT_DIRECTORY}/data/mysql/restore

docker exec -ti mysql_mysql_1 sh << 'EOF'
cd /var/lib/mysql/restore

echo 'CREATE DATABASE apik;USE apik;' | cat - apik.db.sql > temp && mv temp apik.db.sql
mysql --user=root --password=$MYSQL_ROOT_PASSWORD < apik.db.sql

echo 'CREATE DATABASE apik_data;USE apik_data;' | cat - apik_data.db.sql > temp && mv temp apik_data.db.sql
mysql --user=root --password=$MYSQL_ROOT_PASSWORD < apik_data.db.sql

echo 'USE apik;' | cat - apik.data.sql > temp && mv temp apik.data.sql
mysql --user=root --password=$MYSQL_ROOT_PASSWORD < apik.data.sql
EOF