簡體   English   中英

Docker MySQL mysqli::real_connect():(HY000/2002): 連接被拒絕

[英]Docker MySQL mysqli::real_connect():(HY000/2002): Connection refused

我是 docker/docker-compose 的新手。 我正在嘗試連接 2 個容器,它們是CodeIgniter應用程序和MySQL 我似乎無法解決我的 web 應用程序上的“mysqli::real_connect(): (HY000/2002): Connection denied”問題。 我能夠從容器內部 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

這是我的數據庫。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

在基於 Docker Compose 的設置中,您可以使用服務名稱作為主機名。 在您的示例中,設置

'hostname' => 'db'

Compose 中的網絡更詳細地討論了這一點。

Docker 容器沒有一致的 IP 地址,手動查找它們通常沒有用。 您不需要links:在現代 Docker 中,刪除該行也不會有害。

我終於明白了。 更改 MySQL 版本有效。

image: mysql:5.7

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

在基於 Docker Compose 的設置中,您可以使用服務名稱作為主機名。 在您的示例中,設置

'主機名' => 'db'

如果您使用 docker 和 2.0.0 及以下版本。 請使用image: mysql:5.7我解決了我的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM