Пожалуйста, помогите мне решить эту проблему:
Я использую docker, чтобы создать контейнер mysql и автоматически инициализировать в нем базу данных на основе mysql: 8.0.19. Но когда я вхожу в контейнер и ввожу пароль после 'mysql -u root -p', мне говорят, что:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'
Есть четыре файла: Dockerfile, схема. sql, привилегии. sql, настройка. sh
Dockerfile:
FROM mysql:8.0.19
# allow no password
ENV MYSQL_ALLOW_EMPTY_PASSWORD yes
# copy file into container
COPY setup.sh /mysql/setup.sh
COPY schema.sql /mysql/schema.sql
COPY privileges.sql /mysql/privileges.sql
# exec these command when container start up
CMD ["sh", "/mysql/setup.sh"]
setup. sh:
#!/bin/bash
echo 'checking mysql status.'
service mysql status
echo '1.start mysql....'
service mysql start
sleep 3
service mysql status
echo '2.start importing data....'
mysql < /mysql/schema.sql
echo '3.end importing data....'
sleep 3
service mysql status
echo '4.start changing password....'
mysql < /mysql/privileges.sql
echo '5.end changing password....'
sleep 3
service mysql status
echo 'mysql is ready'
tail -f /dev/null
привилегий. sql:
use mysql;
select host, user, plugin from user;
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
схема. sql:
create database `collector`;
use collector;
DROP TABLE IF EXISTS `EVENT`;
CREATE TABLE `EVENT` (
`ID` VARCHAR(50) NOT NULL,
`EventType`VARCHAR(50) DEFAULT NULL,
`EventID` VARCHAR(50) DEFAULT NULL,
`EpcID` VARCHAR(50) DEFAULT NULL,
`TimeStamp` FLOAT DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `EVENT` (`ID`, `EventType`, `EventID`, `EpcID`, `TimeStamp`)
VALUES('0','0','0','0',0.0);
Я думаю, что привилегии. sql может быть причиной проблемы, но я не знаю, как ее решить.
Кстати, я использую:
docker build . -t mysql_service:1.0
docker run -p 3306:3306 --name mysql_service -e MYSQL_ROOT_PASSWORD=123456 -d mysql_service:1.0
для сборки и бежать.