0

I work on a project and I need to automate the installation of the server. The server work with repository that I get on GitHub and after that the services are started to make the server working.

So thanks to my bash script I get all repositories, I start container, but after that I have a problem to restore the mysql DB :

I need to execute some command on my container, so I connect myself to the container like this :

docker exec -ti {my_container_name} sh

When my script execute this command, a shell is opened, and I can type the rest of my commands and when i type exit the rest of the following commands are executes :

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

All there commands work if I type them in the shell that have been open, but here is my problem .. I need to type them with my keyboard, but I would the script do it for me.

I search lot of things to do it, but i didn't find a good way to do it.

So what I want is when the docker exec ... command is execute, I want the commands after this command are execute in the shell that have been open by the first command.

Here's the code I have currently :

git clone git@<git_file>.git ${APIK_ROOT_DIRECTORY}/data/mysql/restore

docker exec -ti mysql_mysql_1 sh

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

We can see on my screen that when my script execute the docker exec command, a shell is open and my script is paused. And when I exit this shell, the rest of the command is exec. But I want that the commands be executed when the shell is open. Execution of my script

1
  • Create a mapped drive from your host machine to the docker container with -v when you run the container and then run the script from the mapped drive in the container Commented Oct 30, 2020 at 13:40

1 Answer 1

1

You can try this :

git clone [email protected]: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
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.