Docker MySQL mysqli :: real_connect():( HY000 / 2002):连接被拒绝

时间:2019-12-24 01:39:55

标签: php mysql docker codeigniter docker-compose

我是docker / docker-compose的新手。我正在尝试连接2个容器,分别是 CodeIgniter 应用程序和 MySQL 。我似乎无法解决Web应用程序上的'mysqli :: real_connect():(HY000 / 2002):连接被拒绝'问题。我能够从容器内部ping通另一个容器,反之亦然。

这是我的 docker-compose.yml 文件:

version: '3'

services:

  web:
    container_name: ciblog
    build: .
    links: 
      - db
    depends_on:
      - db
    ports:
      - '80:80'
    volumes: 
      - .:/var/www/html/

  db:
    container_name: mysql
    image: mysql:latest
    ports:
      - '3306:3306'
    environment:
      MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
      MYSQL_USER: root
      MYSQL_DATABASE: ciblog
    volumes:
      - ./assets/sql/ciblog.sql:/docker-entrypoint-initdb.d/ciblog.sql

Dockerfile

FROM php:7.0-apache
RUN apt-get update && \
    apt-get install -y libfreetype6-dev libjpeg62-turbo-dev && \
    docker-php-ext-install mysqli && \
    docker-php-ext-install mbstring && \
    docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/  &&  \
    docker-php-ext-install gd
RUN a2enmod rewrite
RUN service apache2 restart

这是我的database.php配置:

$active_group = 'default';
$query_builder = TRUE;

$db['default'] = array(
    'dsn'   => '',
    'dbport' => '3306',
    'hostname' => 'db',
    'username' => 'root',
    'password' => '',
    'database' => 'ciblog',
    'dbdriver' => 'mysqli',
    'dbprefix' => '',
    'pconnect' => FALSE,
    'db_debug' => FALSE,
    'cache_on' => FALSE,
    'cachedir' => '',
    'char_set' => 'utf8',
    'dbcollat' => 'utf8_general_ci',
    'swap_pre' => '',
    'encrypt' => FALSE,
    'compress' => FALSE,
    'stricton' => FALSE,
    'failover' => array(),
    'save_queries' => TRUE
);

任何人都可以帮助我确定问题吗?先感谢您。 如果您想查看文件,这是我的GitHub存储库:https://github.com/josephsim/docker-ciblog

3 个答案:

答案 0 :(得分:0)

在基于Docker Compose的设置中,您可以将服务名称用作主机名。在您的示例中,设置

'hostname' => 'db'

Networking in Compose对此进行了详细讨论。

Docker容器没有一致的IP地址,手动查找它们通常没有用。您也不需要在现代Docker中使用links:,并且删除该行也不会有害。

答案 1 :(得分:0)

我终于明白了。更改MySQL版本是可行的。

image: mysql:5.7

来源:https://stackoverflow.com/a/50169745/12555817

答案 2 :(得分:0)

在基于 Docker Compose 的设置中,您可以使用服务名称作为主机名。在您的示例中,设置

'hostname' => 'db'