Предупреждение: mysqli_real_connect (): (HY000 / 1698): доступ запрещен для пользователя 'root' @ 'localhost' - Docker - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь создать Docker-образ Wordpress с supervisor только изо всех сил. Код из авторитетного источника:

https://github.com/how2dock/docbook/tree/master/ch01/supervisor

Вот мой Dockerfile

FROM ubuntu:19.04

ARG DEBIAN_FRONTEND=noninteractive

RUN apt-get update && apt-get -y install \
 apache2 \
 php7.2 \
 php7.2-mysql \
 supervisor \
 wget

RUN echo 'mysql-server mysql-server/root_password password root' | debconf-set-selections && \
echo 'mysql-server mysql-server/root_password_again password root' | debconf-set-selections

RUN apt-get install -qqy mariadb-server

RUN wget http://wordpress.org/latest.tar.gz && \
 tar xzvf latest.tar.gz && \
 cp -R ./wordpress/* /var/www/html && \
 rm /var/www/html/index.html

RUN (/usr/bin/mysqld_safe &); sleep 5; mysqladmin -u root -proot create wordpress

COPY wp-config.php /var/www/html/wp-config.php
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf

EXPOSE 80

CMD ["/usr/bin/supervisord"]

и часть моего wp-config.php

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'wordpress');

/** MySQL database username */
define('DB_USER', 'root');

/** MySQL database password */
define('DB_PASSWORD', 'root');

/** MySQL hostname */
define('DB_HOST', 'localhost');

/** Database Charset to use in creating database tables. */
define('DB_CHARSET', 'utf8');

/** The Database Collate type. Don't change this if in doubt. */
define('DB_COLLATE', '');

supervisord.conf

[supervisord]
nodaemon=true

[program:mysqld]
command=/usr/bin/mysqld_safe
autostart=true
autorestart=true
user=root

[program:httpd]
command=/bin/bash -c "rm -rf /run/httpd/* && /usr/sbin/apachectl -D FOREGROUND"

Сборка контейнера;docker build -t wordpress . и запустите веб-сервер с docker run -d -p 82:80 wordpress. Перейдите к http://localhost:82, ожидающему найти новую блестящую установку WP - только для поиска:

Access denied for user 'root'@'localhost'

Я пробовал несколько комбинаций имени пользователя и пароля базы данных. Я новичок в Докере. Чего мне не хватает?

1 Ответ

0 голосов
/ 10 октября 2019

Почему вы заново изобретаете колесо с этим Dockerfile? а также нарушая эмпирическое правило , чтобы иметь один процесс на контейнер?

В случае с MySQL, не так просто иметь Dockerfile и работать со временем сборки. Вам нужно создать пользователя во время выполнения, используя точку входа, как только служба MySQL будет запущена.

Предложит использовать официальный образ WordPress и MySQL так просто, как это.

version: '3.3'

services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
       WORDPRESS_DB_NAME: wordpress
volumes:
    db_data: {}

Теперь перейдем к вашему вопросу, причина в том, что в вашем контейнере Docker нет пользователя.

RUN (/usr/bin/mysqld_safe &); sleep 5; mysqladmin -u root -proot create wordpress

Каждая директива run выполняется в своей собственной оболочке. поэтому приведенная выше команда не будет выполнять работу, как вы ожидаете. вам нужно переместить эти шаги на точку входа , как это делает официальный Dockerfile MySQL.

Еще одно предложение, использовать MySQL в качестве базового образа и тратить в соответствии с вашими потребностями, но опять же вам нужна некоторая правильная точка входа для работыс MySQL. это не похоже на WordPress или контейнер узлов.

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