Docker + MySQL 8: проблемы с подключением - PullRequest
0 голосов
/ 26 апреля 2020

MySQL в Docker не будет подключаться.

Я уже просматривал другие сообщения, но не могу найти, что я делаю неправильно. Используя MySQL 5.6 он подключается нормально. Но я хочу использовать MySQL 8.

Это отрывок из моего docker-compose.yml файла:


version: '2'

# ...other services and...

  mysql:
    container_name: mysql
    image: mysql:8.0
    ports:
      - "3306:3306"
    environment:
      MYSQL_DATABASE: "the_database"
      MYSQL_USER: "my_user"
      MYSQL_PASSWORD: "some_password_123"
      MYSQL_ROOT_PASSWORD: "some_root_password123"
    volumes:
      - ./data/mysql:/var/lib/mysql
      - ./data/mysql-dumps:/var/mysql-dumps
     # Tried this command to use mysql_native_password but still cant log in
    command:
      - "--default-authentication-plugin=mysql_native_password"

Я могу go в контейнер и попытаться войти:

$ docker container exec -it mysql /bin/bash

$ root@7b4d6ada50fb:/# mysql -h localhost -u my_user -p
Enter password:
ERROR 1045 (28000): Access denied for user 'my_user'@'localhost' (using password: YES)
root@7b4d6ada50fb:/#

Я очень уверен пароль вводится правильно. Но безуспешно. Смотри, что я пытаюсь подключить даже внутри контейнера. И порты являются «связанными» 3306: 3306. Больше ничего не могу проверить. Любая помощь очень ценится.

При запуске моего docker container inspect mysql вот некоторые выдержки:


"Env": [
  "MYSQL_DATABASE=the_database",
  "MYSQL_USER=my_user",
  "MYSQL_PASSWORD=some_password_123",
  "MYSQL_ROOT_PASSWORD=some_root_password123",
  "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
  "GOSU_VERSION=1.12",
  "MYSQL_MAJOR=8.0",
  "MYSQL_VERSION=8.0.19-1debian10"
],

# ... and network:
 "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "873ee1fe38431b8b2c2a55e3b7c1b1649e14c5c8946c00e65820be72a0ff5b73",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "3306/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "3306"
                    }
                ],
                "33060/tcp": null
            },
            "SandboxKey": "/var/run/docker/netns/873ee1fe3843",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "",
            "Gateway": "",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "",
            "IPPrefixLen": 0,
            "IPv6Gateway": "",
            "MacAddress": "",
            "Networks": {
                "project_default": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": [
                        "mysql",
                        "7b4d6ada50fb"
                    ],
                    "NetworkID": "2f6e5947d747fb8518628361660193bce331efe2d79ce86e3e7f5cacf81ce26a",
                    "EndpointID": "8bc41562ce39de01cd4162cc5c9b9cb42b1a4f8eed8af884a31766b64eda8199",
                    "Gateway": "172.18.0.1",
                    "IPAddress": "172.18.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:12:00:02",
                    "DriverOpts": null
                }
            }
        }

1 Ответ

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

Я получил то, что делал.

docker - создал свою собственную сеть. Итак, используя результат Network из inspect, как я уже писал в своем вопросе выше:

"Networks": {
  "project_default": {
    "IPAMConfig": null,
    "Links": null,
    "Aliases": [
      "mysql",          <- HERE!!
      "7b4d6ada50fb"
    ],

Я решил попробовать этот псевдоним в строковом соединении следующим образом:

mysql -h mysql -u my_user -p

И отлично ! Я мог бы подключиться к контейнеру! Вероятно, это связано с тем, что сравнение MySQL относится к пользователю и хостам, к которым каждый пользователь может или не может получить доступ. Но я не совсем уверен в этом.

Я благодарен за любую дополнительную информацию, которую кто-либо может предоставить.

И, поскольку я использую Laravel, я сделал то же самое в Мой .env файл также:


DB_CONNECTION=mysql
DB_HOST=mysql   <- HERE!!
DB_PORT=3306
DB_DATABASE=your_db_name
DB_USERNAME=your_user
DB_PASSWORD=your_password
...