1 Pytanie: Uzyskaj dostęp do mysql db wewnątrz kontenera dokera z zewnątrz

pytanie utworzone w Sat, Mar 16, 2019 12:00 AM

Uczę się używać dokera, aby ułatwić mi rozwój, ale wciąż nie mogę uzyskać dostępu do mysql.

Oto mój 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 działa bez problemów, co oznacza, że ​​mysql też musi być w porządku. Jestem na Linuksie i próbuję połączyć bazę danych za pomocą mysql workbench. Wygląda na to, że połączenie jest również w porządku, nie ma schematu i nie ma tabel wordpress.

Próbowałem dodać phpmyadmina do 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

ale tutaj pojawia się następujący błąd po próbie uzyskania dostępu do db: wprowadź opis obrazu tutaj

Czego mi brakuje?

EDYCJA: Oto przegląd działających kontenerów: wprowadź opis obrazu tutaj

    
0
  1. co pokazuje docker-compose ps?
    2019-03-16 20: 13: 35Z
  2. @ Thomasleveil - Dodałem ekran z wynikiem polecenia do postu
    2019-03-16 20: 26: 33Z
  3. Dlaczego nie odwzorować portu MySQL jako 33060: 3306, wtedy możesz być pewien, że wewnątrz twojego kontenera używasz 3306, a poza nim używasz 33060? Robisz to dla http i to działa poprawnie
    2019-03-16 20: 27: 32Z
  4. @ Caius Próbowałem, ale mój problem trwał.
    2019-03-16 20: 49: 19Z
  5. Co pokazuje docker-compose exec db mysql -p -e "SHOW DATABASES"?
    2019-03-16 20: 51: 52Z
1 odpowiedzi                              1                         

Więc zmodyfikowałem twoją wersję dokera z 2 małymi zmianami i nie mam problemu.

Stworzyłem użytkownika dla wordpress ( userdev1 ) w mysql.

root jest już tutaj i może mieć pewne ograniczenia dostępu zdalnego.

Za pomocą phpmyadmin mogę zalogować się za pomocą userdev1 lub root

Chcesz mieć dostęp do sieci przy użyciu konta root , musisz ustawić tę zmienną
MYSQL_ROOT_HOST.

Więcej informacji znajdziesz na tej stronie ( 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:

** AKTUALIZACJA **

Z ostatnią wersją obrazu dokowanego mysql (aka mysql 8.0), musisz zmienić domyślne uwierzytelnienie na mysql_native_password, aby było kompatybilne ze starszym klientem mysql

źródło: 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
    
1
2019-03-17 03: 32: 58Z
  1. Twój kod działa. Jednak prawdziwy powód, dla którego mój kod nie działa, znajduje się w obrazie mysql. Z jakiegoś powodu jest potrzebne „image: mysql: 5.7”, ponieważ „image: mysql: latest” powoduje mój problem. Dzięki i tak.
    2019-03-16 22: 32: 21Z
  2. @ TomášVavřinka, zaktualizowałem swoją odpowiedź o aktualizację ostatniej wersji mysql (aka 8.0)
    2019-03-17 03: 33: 54Z
źródło umieszczone tutaj