Не удается подключиться к локальному MySQL серверу, используя Docker - PullRequest
0 голосов
/ 24 апреля 2020

Пожалуйста, помогите мне решить эту проблему:

Я использую 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

для сборки и бежать.

1 Ответ

0 голосов
/ 24 апреля 2020

Чтобы установить пароль root, используйте MYSQL_ROOT_PASSWORD=123456.

MYSQL_DATABASE=collector, чтобы создать базу данных и использовать ее по умолчанию.

FLUSH PRIVILEGES не доступны необходимо для ALTER USER.

Контейнер docker не имеет инициализации, поэтому команды service ... не будут работать. Также mysqld не выполняется на этапе сборки.

https://hub.docker.com/_/mysql/ в Initializing a fresh instance вы можете поместить SQL файлы в /docker-entrypoint-initdb.d для инициализации базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...