Estou trabalhando em um problema semelhante, configurando o mariadb em um contêiner do Docker. Eu encontrei isso procurando maneiras de executar o mysql_secure_install. Existem maneiras de alimentar a entrada para o script ou simplesmente executar os comandos que o script executaria. Eu optei pelo último.
Eu também corri para o mesmo problema de os comandos não encontrarem uma instância MySQL em execução. O problema é que cada etapa de sua compilação é executada em um contêiner separado, portanto, você teria que iniciar o mysql para cada comando ou executá-los em uma única etapa. Isto é o que eu tenho no meu Dockerfile:
ARG DATABASE_ROOT_PASS
RUN service mysql start \
&& mysqladmin -u root password "$DATABASE_ROOT_PASS" \
&& mysql -u root -p"$DATABASE_ROOT_PASS" -e "UPDATE mysql.user SET Password=PASSWORD('$DATABASE_ROOT_PASS') WHERE User='root'" \
&& mysql -u root -p"$DATABASE_ROOT_PASS" -e "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1')" \
&& mysql -u root -p"$DATABASE_ROOT_PASS" -e "DELETE FROM mysql.user WHERE User=''" \
&& mysql -u root -p"$DATABASE_ROOT_PASS" -e "DELETE FROM mysql.db WHERE Db='test' OR Db='test\_%'" \
&& mysql -u root -p"$DATABASE_ROOT_PASS" -e "FLUSH PRIVILEGES"
Você pode construir com
docker build . --build-arg DATABASE_ROOT_PASS='changeme123'
Você pode encontrar a documentação para --build-arg aqui .