尝试从Docker容器连接到本地mysql数据库时拒绝连接

ufollettu

我在从Docker容器连接本地mysql数据库时遇到问题。我在容器中使用带有两个服务的docker-compose,数据库不在容器中

我有这个docker-compose文件:

version: '2'
services:
    web:
        build:
            context: ./
            dockerfile: web-dev.dockerfile
        volumes:
            - ./:/var/www
        ports:
            - "8080:80"
        links:
            - app
        network_mode: "bridge"
        dns:
            - 10.0.50.6
    app:
        build:
            context: ./
            dockerfile: app-dev.dockerfile
        volumes:
            - ./:/var/www
        network_mode: "bridge"
        dns:
            - 10.0.50.6

web容器是带有此Dockerfile的Nginx服务:

FROM nginx:1.10

ADD ./vhost.dev.conf /etc/nginx/conf.d/default.conf

WORKDIR /var/www

和此配置文件:

server {
    listen 80;

    index index.php index.html;
    root /var/www/formapp/public;

    location / {
        try_files $uri /index.php?$args;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass app:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

app容器与此Dockerfile一个应用程序服务:

FROM php:7-fpm

ENV USER=pasquale

RUN apt-get update && apt-get install -y libmcrypt-dev mysql-client \
    openssl zip unzip git nano wget libaio-dev iputils-ping

RUN mkdir -p /opt/oracle/instantclient_10_2
# Download files from in oracle folder:
#   https://agora.zanichelli.it/downloads/basic-10.2.0.5.0-linux-x64.zip
#   https://agora.zanichelli.it/downloads/sdk-10.2.0.5.0-linux-x64.zip

ADD oracle/basic-10.2.0.5.0-linux-x64.zip /opt/oracle/basic-10.2.0.5.0-linux-x64.zip
ADD oracle/sdk-10.2.0.5.0-linux-x64.zip /opt/oracle/sdk-10.2.0.5.0-linux-x64.zip
RUN unzip /opt/oracle/basic-10.2.0.5.0-linux-x64.zip -d /opt/oracle \
    && unzip /opt/oracle/sdk-10.2.0.5.0-linux-x64.zip -d /opt/oracle \
    && ln -s /opt/oracle/instantclient_10_2/libclntsh.so.10.1 /opt/oracle/instantclient_10_2/libclntsh.so \
    && ln -s /opt/oracle/instantclient_10_2/libclntshcore.so.10.1 /opt/oracle/instantclient_10_2/libclntshcore.so \
    && ln -s /opt/oracle/instantclient_10_2/libocci.so.10.1 /opt/oracle/instantclient_10_2/libocci.so

ADD oracle/tns-admin/tnsnames.ora /opt/oracle/instantclient_10_2/network/admin/tnsnames.ora
ENV LD_LIBRARY_PATH /opt/oracle/instantclient_10_2/

RUN docker-php-ext-install pdo_mysql \
    && pecl install mcrypt-1.0.1 \
    && docker-php-ext-enable mcrypt \
    && pecl install mongodb \
    && docker-php-ext-enable mongodb \
    && docker-php-ext-configure pdo_oci --with-pdo-oci=instantclient,/opt/oracle/instantclient_10_2,10.2 \
    && echo 'instantclient,/opt/oracle/instantclient_10_2' | pecl install oci8 \
    && docker-php-ext-install pdo_oci \
    && docker-php-ext-enable oci8

RUN yes | pecl install xdebug \
    && echo "zend_extension=$(find /usr/local/lib/php/extensions/ -name xdebug.so)" > /usr/local/etc/php/conf.d/xdebug.ini \
    && echo 'xdebug.remote_enable=1' >> /usr/local/etc/php/conf.d/xdebug.ini \
    && echo 'xdebug.default_enable=1' >> /usr/local/etc/php/conf.d/xdebug.ini \
    && echo 'xdebug.remote_connect_back=1' >> /usr/local/etc/php/conf.d/xdebug.ini \
    && echo 'xdebug.remote_autostart=1' >> /usr/local/etc/php/conf.d/xdebug.ini \
    && echo 'xdebug.remote_handler="dbgp"' >> /usr/local/etc/php/conf.d/xdebug.ini \
    && echo 'xdebug.remote_port=9000' >> /usr/local/etc/php/conf.d/xdebug.ini \
    && echo 'xdebug.remote_host=0.0.0.0' >> /usr/local/etc/php/conf.d/xdebug.ini \
    && echo 'xdebug.remote_log=/var/www/xdebug.log' >> /usr/local/etc/php/conf.d/xdebug.ini

RUN mkdir -p /home/$USER
RUN groupadd -g 1000 $USER
RUN useradd -u 1000 -g $USER $USER -d /home/$USER
RUN chown $USER:$USER /home/$USER
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

WORKDIR /var/www
USER $USER

使用docker-compose -f docker-compose.dev.yml up --build -d正常启动容器docker ps执行命令,给我以下输出:

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                           NAMES
7202e2862ef5        190todb_web         "nginx -g 'daemon of…"   9 hours ago         Up About an hour    443/tcp, 0.0.0.0:8080->80/tcp   190todb_web_1_3c628ae1c69b
d45c04d353d5        190todb_app         "docker-php-entrypoi…"   9 hours ago         Up About an hour    9000/tcp                        190todb_app_1_dd2ac7028b87

我在项目文件夹中安装了一个lumen应用程序,formapp然后创建了一个播种机,以便在我的数据库中以及从bash中插入假数据,如果我运行/projectfolder/formapp$ php artisan db:seed了播种机工作并且我得到以下输出:

Seeding: UsersTableSeeder
Database seeding completed successfully.

然后,我创建了一条从lumen应用访问用户表的路由:

$router->get('users', function () use ($router) {
    return User::all();
});

我的lumen env文件是这样的:

APP_NAME=Lumen
APP_ENV=local
APP_KEY=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
APP_DEBUG=true
APP_URL=http://localhost
APP_TIMEZONE=UTC

LOG_CHANNEL=stack
LOG_SLACK_WEBHOOK_URL=

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=form_db
DB_USERNAME=root
DB_PASSWORD=radiohead

CACHE_DRIVER=file
QUEUE_CONNECTION=sync

JWT_SECRET=JhbGciOiJIUzI1N0eXAiOiJKV1QiLC

但是如果我尝试从中进行连接,则会http://localhost:8080/users出现以下流明错误:

SQLSTATE[HY000] [2002] Connection refused (SQL: select * from `users`)

我尝试更改,DB_HOST但无法解决问题:

0.0.0.0 (SQLSTATE[HY000] [2002] Connection refused (SQL: select * from `users`));
172.17.0.1 (SQLSTATE[HY000] [1130] Host '172.17.0.2' is not allowed to connect to this MySQL server (SQL: select * from `users`));

172.17.0.1 是我的docker0 inet地址。

我如何配置我的项目才能工作?

PS:流明应用程序已启动并正在运行,仅是数据库连接无法正常工作

丹尼尔W.

如果localhost数据库和应用程序不在同一服务器上,则无法使用

您需要通过以下方式允许访问:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.17.0.2' IDENTIFIED BY '<password>';

您可以用172.17.0.2通配符替换%

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

尝试通过Eclipse,Java连接到mysql数据库时访问被拒绝

无法从Spring Boot Docker容器连接到本地MySQL数据库服务器

将Docker容器连接到远程MySQL数据库

无法连接到Docker容器中的MySQL数据库

从docker容器连接到mysql数据库

在Docker容器中连接本地MySQL数据库?

从Django应用docker连接到本地mysql数据库

连接到MySQL本地数据库时出现错误

尝试连接到docker mysql容器时的Symfony 4“连接被拒绝”

从 docker 容器连接到主机 mysql db 时连接被拒绝

无法从Intellij连接到在Docker容器中运行的mySql-“指定的数据库用户/密码组合被拒绝”

如何从 docker 容器中的 python 脚本连接到本地主机上的 mysql 数据库

将容器连接到本地数据库

无法从我的本地机器连接到 docker 容器中的 postgres 数据库

如何从 docker 容器连接到本地主机和外部数据库

允许Docker容器连接到本地/主机Postgres数据库

如何将本地机器上运行的 Postgres 数据库连接到 docker 容器

NestJS .env 未连接到 Docker 容器数据库

无法从 golang Docker 容器连接到 Postgres 数据库

连接到Docker容器上的PostgreSQL数据库

无法从Docker容器连接到数据库

PHP尝试连接到本地mysql数据库而不是指定的远程地址

尝试通过远程计算机连接到数据库时,SQL Server连接被拒绝

用户在 python docker 容器中连接远程 MySQL 数据库的访问被拒绝

从vbscript连接到mysql时拒绝用户访问数据库

从 Docker 容器内部连接到 RDS Postgreql 数据库时出错

尝试连接到数据库时遇到错误 08001

尝试连接到SQL Server数据库时出错

如何将本地托管的MySQL数据库与Docker容器连接