1

My PHP is found at: http://localhost:8080/administrator/index.php
And my PHPMyAdmin is found at: http://localhost:8080/phpmyadmin/index.php?route=/

I encounter an error when trying to log into PhpMyAdmin:

mysqli::real_connect(): (HY000/2002): No such file or directory

I have a local Docker Compose app running:

version: '3.1'

services:
  joomla:
    image: joomla
    restart: always
    links:
      - joomladb:mysql
    ports:
      - 8080:80
    volumes:
      - "../:/var/www/html"
    environment:
      JOOMLA_DB_HOST: joomladb
      JOOMLA_DB_PASSWORD: root

  joomladb:
    image: mysql:5.6
    ports:
      - 3306
    restart: always
    volumes:
      - "./data:/var/lib/mysql"
    environment:
      MYSQL_ROOT_PASSWORD: root

I go to that route via my console, and execute the command docker-compose up, that way when i list my docker images i get as follows:

C:\Users\user/docker ps
CONTAINER ID  IMAGE     COMMAND                   CREATED       STATUS        PORTS                   NAMES
aaca47f88000  joomla    "/entrypoint.sh apac..."  2 hours ago   Up 11 minutes 0.0.0.0:8080- >80/tcp   ops_joomla_1
B8d265boбa86  mysql:5.6 "docker-entrypoint....."  19 hours ago  Up 11 minutes 0.0.0.0:55738->3306/tcp ops_joomladb_1

I have checked my MySQL image and that works correctly.

Joomla works correctly as I can log in and navigate without encountering any problems. I havent changed any PhpMyAdmin credentials in any PHP files so it should be default, as far as I am aware that is:

  • username: root
  • pawword: ``.

Here is my config.inic.php file:

<?php
/**
 * phpMyAdmin sample configuration, you can use it as base for
 * manual configuration. For easier setup you can use setup/
 *
 * All directives are explained in documentation in the doc/ folder
 * or at <https://docs.phpmyadmin.net/>.
 */

declare(strict_types=1);

/**
 * This is needed for cookie based authentication to encrypt password in
 * cookie. Needs to be 32 chars long.
 */
$cfg['blowfish_secret'] = 'W-Bo3r6x3vm-LM{fv/=uR/=2ASEHa[dP'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

/**
 * Servers configuration
 */
$i = 0;

/**
 * First server
 */
$i++;
/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'cookie';
/* Server parameters */
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['AllowNoPassword'] = true;
$cfg['CheckConfigurationPermissions'] = false;

/**
 * phpMyAdmin configuration storage settings.
 */

/* User used to manipulate with storage */
// $cfg['Servers'][$i]['controlhost'] = '';
// $cfg['Servers'][$i]['controlport'] = '';
// $cfg['Servers'][$i]['controluser'] = 'pma';
// $cfg['Servers'][$i]['controlpass'] = 'pmapass';

/* Storage database and tables */
// $cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
// $cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark';
// $cfg['Servers'][$i]['relation'] = 'pma__relation';
// $cfg['Servers'][$i]['table_info'] = 'pma__table_info';
// $cfg['Servers'][$i]['table_coords'] = 'pma__table_coords';
// $cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages';
// $cfg['Servers'][$i]['column_info'] = 'pma__column_info';
// $cfg['Servers'][$i]['history'] = 'pma__history';
// $cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs';
// $cfg['Servers'][$i]['tracking'] = 'pma__tracking';
// $cfg['Servers'][$i]['userconfig'] = 'pma__userconfig';
// $cfg['Servers'][$i]['recent'] = 'pma__recent';
// $cfg['Servers'][$i]['favorite'] = 'pma__favorite';
// $cfg['Servers'][$i]['users'] = 'pma__users';
// $cfg['Servers'][$i]['usergroups'] = 'pma__usergroups';
// $cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding';
// $cfg['Servers'][$i]['savedsearches'] = 'pma__savedsearches';
// $cfg['Servers'][$i]['central_columns'] = 'pma__central_columns';
// $cfg['Servers'][$i]['designer_settings'] = 'pma__designer_settings';
// $cfg['Servers'][$i]['export_templates'] = 'pma__export_templates';

/**
 * End of servers configuration
 */

/**
 * Directories for saving/loading files from server
 */
$cfg['UploadDir'] = '';
$cfg['SaveDir'] = '';

/**
 * Whether to display icons or text or both icons and text in table row
 * action segment. Value can be either of 'icons', 'text' or 'both'.
 * default = 'both'
 */
//$cfg['RowActionType'] = 'icons';

/**
 * Defines whether a user should be displayed a "show all (records)"
 * button in browse mode or not.
 * default = false
 */
//$cfg['ShowAll'] = true;

/**
 * Number of rows displayed when browsing a result set. If the result
 * set contains more rows, "Previous" and "Next".
 * Possible values: 25, 50, 100, 250, 500
 * default = 25
 */
//$cfg['MaxRows'] = 50;

/**
 * Disallow editing of binary fields
 * valid values are:
 *   false    allow editing
 *   'blob'   allow editing except for BLOB fields
 *   'noblob' disallow editing except for BLOB fields
 *   'all'    disallow editing
 * default = 'blob'
 */
//$cfg['ProtectBinary'] = false;

/**
 * Default language to use, if not browser-defined or user-defined
 * (you find all languages in the locale folder)
 * uncomment the desired line:
 * default = 'en'
 */
//$cfg['DefaultLang'] = 'en';
//$cfg['DefaultLang'] = 'de';

/**
 * How many columns should be used for table display of a database?
 * (a value larger than 1 results in some information being hidden)
 * default = 1
 */
//$cfg['PropertiesNumColumns'] = 2;

/**
 * Set to true if you want DB-based query history.If false, this utilizes
 * JS-routines to display query history (lost by window close)
 *
 * This requires configuration storage enabled, see above.
 * default = false
 */
//$cfg['QueryHistoryDB'] = true;

/**
 * When using DB-based query history, how many entries should be kept?
 * default = 25
 */
//$cfg['QueryHistoryMax'] = 100;

/**
 * Whether or not to query the user before sending the error report to
 * the phpMyAdmin team when a JavaScript error occurs
 *
 * Available options
 * ('ask' | 'always' | 'never')
 * default = 'ask'
 */
//$cfg['SendErrorReports'] = 'always';

/**
 * You can find more configuration options in the documentation
 * in the doc/ folder or at <https://docs.phpmyadmin.net/>.
 */

I allowed logging in using no password by changing $cfg['Servers'][$i]['AllowNoPassword'] from false to true.

And since I couldn't change the permissions to the file, I added the following line to the file:

$cfg['CheckConfigurationPermissions'] = false;

I also added a random blowfish as my auth mode is cookie

$cfg['blowfish_secret'] = 'W-Bo3r6x3vm-LM{fv/=uR/=2ASEHa[dP';

I have read on other sites that the error I am getting can be fixed by changing $cfg['Servers'][$i]['host'] from 'localhost' to '127.0.0.1'. However, I want to connect by typing in "localhost" and not the IP, and it gives an other error:

mysqli::real_connect(): (HY000/2002): Connection refused

I don't think I have any dockerfiles, if I did where would I find them?

Does anyone know how to fix this problem?

I appreciate the help, thanks!

PS: If any more information is needed I'd be happy to edit the post and add it

FlawFull
  • 87
  • 9
  • we need the docker compose yaml and any relevent dockerfiles – delboy1978uk Apr 13 '21 at 14:51
  • @delboy1978uk updated! thanks – FlawFull Apr 13 '21 at 15:08
  • I don't know Joomla, does it come with PhpMyAdmin or are you using a PhpMyAdmin instance outside the Docker stack ? You mentionned you wanted to access to the database with `localhost` but your containers have their own IP in the Docker network. Maybe you just need to use the service name: `joomladb`. Tell me if it works and I'll post a detailed answer. – AymDev Apr 13 '21 at 15:17
  • If you use an external PhpMyAdmin I think you will need to map the port of the MySQL container. In your **docker-compose.yml**, in `services.joomladb.ports`, replace `3306` with `3306:3306`. As you can see in the `docker ps` output, the port of your machine mapped to container's `3306` is `55738` (Docker probably chose it randomly). – AymDev Apr 13 '21 at 16:00
  • @AymDev Sorry for the late reply. I downloaded the php zip file from the official site and extracted it into my Joomla folder, that way i could acces it with [localhost](http://localhost:8080/phpmyadmin/index.php?route=/) , I also cannot log in with `joomladb` as the username. I also added `3306:3306` as the ports as you indicated and the docker images now have `3306` both internally and externaly, but I'm still gettign the same error – FlawFull Apr 14 '21 at 12:26
  • I said to use `joomladb` instead of `localhost`, so as the host, not the username. I guess your username is `root` for a local PhpMyAdmin instance. – AymDev Apr 14 '21 at 12:35
  • @AymDev If I try to use joomladb as the host it gives me the following `DNS_PROBE_FINISHED_NXDOMAIN` – FlawFull Apr 14 '21 at 12:44
  • Ok so I guess it answers my first question: you don't use PhpMyAdmin inside a container. I'm afraid you're in the special case I still don't explain where `127.0.0.1` works while `localhost` doesn't. Try with that, just to see if it works. – AymDev Apr 14 '21 at 12:51
  • @AymDev Using localhost i get `mysqli::real_connect(): (HY000/2002): No such file or directory` and using 127.0.0.1 i get `mysqli::real_connect(): (HY000/2002): Connection refused` – FlawFull Apr 14 '21 at 13:29
  • I think you should stick to `127.0.0.1` for now (it's the same as `localhost` so no worries). I'd suspect something related to the database name. Try to see if [this question](https://stackoverflow.com/questions/40561433/docker-mysql-2002-connection-refused) helps. – AymDev Apr 14 '21 at 13:35
  • I just remembered I saved a [gist](https://gist.github.com/AymDev/f1376783f60a416b9402a5e8ef39e784) with a Docker Compose file for MySQL + PhpMyAdmin. Worked very well for a long time. Maybe you'll have a use for it. – AymDev Apr 14 '21 at 13:41
  • If you are diibg Joomla development, please join [joomla.se] Stack Exchange and ask your Joomla questions there to reach an audience of people with an intimate understanding of the CMS and its extensions. – mickmackusa May 04 '21 at 21:13

0 Answers0