Доступ к базе данных mysql внутри контейнера Docker снаружи - PullRequest
0 голосов
/ 16 марта 2019

Я учусь использовать docker, чтобы упростить мою разработку, но все еще не могу получить доступ к mysql.

Вот мой docker-compose.yaml:

version: '3.3'

services:
  # Database
  db:
    image: mysql:latest
    ports:
      - '3306:3306'
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: dev1
      MYSQL_USER: root
      MYSQL_PASSWORD: password
    networks:
      - wpsite
  # Wordpress
  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    ports:
      - '8000:80'
    restart: always
    volumes: ['./:/var/www/html']
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER:  root
      WORDPRESS_DB_PASSWORD: password
      WORDPRESS_DB_NAME: dev1
    networks:
      - wpsite
networks:
  wpsite:
volumes:
  db_data:

Wordpress работает без проблем, а это значит, что с mysql тоже все в порядке. Я на Linux и пытаюсь подключить базу данных через MySQL Workbench. Похоже, что с подключением тоже все в порядке, схемы нет и поэтому нет таблиц wordpress.

Я также пытался добавить phpmyadmin в docker-compose.yaml:

phpmyadmin:
    depends_on:
  - db
image: phpmyadmin/phpmyadmin
restart: always
ports:
  - '8080:80'
environment:
  PMA_HOST: db
  MYSQL_ROOT_PASSWORD: password
networks:
  - wpsite

но здесь я получаю следующую ошибку после попытки доступа к БД: enter image description here

Что мне не хватает?

EDIT: Вот обзор запущенных контейнеров: enter image description here

1 Ответ

1 голос
/ 17 марта 2019

Итак, я изменил ваш docker-compose с двумя небольшими изменениями, и у меня не возникло проблем.

Я создал пользователя для WordPress ( userdev1 ) в mysql.

root уже здесь и может иметь некоторые ограничения для удаленного доступа.

Через phpmyadmin я могу войти в систему с помощью userdev1 или root

Требуется доступ к сети с учетной записью root . Необходимо установить эту переменную
MYSQL_ROOT_HOST.

Более подробную информацию об этом можно найти.страница (https://dev.mysql.com/doc/mysql-installation-excerpt/5.7/en/docker-mysql-more-topics.html#docker_var_mysql-root-host)

version: '3.3'
services:
  # Database
  db:
    image: mysql:5.7
    ports:
      - '3306:3306'
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: password4root
      MYSQL_DATABASE: dev1
      MYSQL_USER: userdev1
      MYSQL_PASSWORD: password4dev1
    networks:
      - wpsite
  # Wordpress
  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    ports:
      - '8000:80'
    restart: always
    volumes: ['./:/var/www/html']
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER:  userdev1
      WORDPRESS_DB_PASSWORD: password4dev1
      WORDPRESS_DB_NAME: dev1
    networks:
      - wpsite
  phpmyadmin:
    depends_on:
      - db
    image: phpmyadmin/phpmyadmin
    restart: always
    ports:
      - '8080:80'
    environment:
      PMA_HOST: db
    networks:
      - wpsite
networks:
  wpsite:
volumes:
  db_data:

** ОБНОВЛЕНО **

С самой последней версией образа docker mysql (он же mysql 8.0),вы должны изменить аутентификацию по умолчанию на mysql_native_password, чтобы она была совместимой с устаревшим клиентом mysql

source: https://dev.mysql.com/doc/mysql-installation-excerpt/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password

  image: mysql:latest
  command: --default-authentication-plugin=mysql_native_password
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...