Почему вы заново изобретаете колесо с этим Dockerfile? а также нарушая эмпирическое правило , чтобы иметь один процесс на контейнер?
В случае с MySQL, не так просто иметь Dockerfile и работать со временем сборки. Вам нужно создать пользователя во время выполнения, используя точку входа, как только служба MySQL будет запущена.
Предложит использовать официальный образ WordPress и MySQL так просто, как это.
version: '3.3'
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
db_data: {}
Теперь перейдем к вашему вопросу, причина в том, что в вашем контейнере Docker нет пользователя.
RUN (/usr/bin/mysqld_safe &); sleep 5; mysqladmin -u root -proot create wordpress
Каждая директива run выполняется в своей собственной оболочке. поэтому приведенная выше команда не будет выполнять работу, как вы ожидаете. вам нужно переместить эти шаги на точку входа , как это делает официальный Dockerfile MySQL.
Еще одно предложение, использовать MySQL в качестве базового образа и тратить в соответствии с вашими потребностями, но опять же вам нужна некоторая правильная точка входа для работыс MySQL. это не похоже на WordPress или контейнер узлов.