从外部访问docker容器内的mysql db

时间:2019-03-16 19:13:10

标签: mysql docker

我正在学习使用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工作台连接数据库。似乎也可以期待连接,没有架构,因此没有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

我想念什么?

编辑: 这是正在运行的容器的概述: enter image description here

1 个答案:

答案 0 :(得分:1)

所以我修改了您的docker-compose,做了2个小改动,但我没有遇到任何问题。

我在mysql中为wordpress( userdev1 )创建了一个用户。

已经在这里,并且对于远程访问可能有一些限制。

通过 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:

** 已更新 **

使用最新版本的mysql docker映像(又名mysql 8.0), 您必须将默认身份验证更改为mysql_native_password才能与旧版mysql客户端兼容

来源: 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