首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >码头MySQL连接DBeaver

码头MySQL连接DBeaver
EN

Stack Overflow用户
提问于 2019-05-01 03:37:51
回答 7查看 40.1K关注 0票数 23

我刚刚完成了youtube上的Docker教程:

https://www.youtube.com/watch?v=SXY0MLHP3hA&lc=Ugzp3vKtSOp0rn2lYyd4AaABAg

我为PHP和MySQL创建了两个Docker容器。文件结构如下:

代码语言:javascript
复制
>Docker_PHP_MySQL
 >DB
   -Dockerfile
 >src
   -index.php
 >www
   -Dockerfile
 development.env
 docker-compose.yml

DB Dockerfile:

代码语言:javascript
复制
FROM mysql:8.0

index.php:

代码语言:javascript
复制
<?php
$mysqli = new mysqli('tut07-db', getenv('MYSQL_USER'), getenv('MYSQL_PASSWORD'), 'information_schema');
if($mysqli->connect_error) 
{
  echo 'Connection Error [', $mysqli->connect_errno, ']: ', $mysqli->connect_error;
} 
else 
{
  echo 'MySQLi Connected Successfully!';
}
?>

Www.Dockerfile:

代码语言:javascript
复制
FROM php:7.2-apache

RUN docker-php-ext-install mysqli
RUN docker-php-ext-enable mysqli

下面是development.env文件:

代码语言:javascript
复制
MYSQL_USER=sys_admin
MYSQL_PASSWORD=sys_password
MYSQL_ROOT_PASSWORD=root_password

最后,docker-compose.yml文件:

代码语言:javascript
复制
version: "3"

networks:
  tut07-frontend:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.10.1.0/24
  tut07-backend:
    driver: bridge
    ipam: 
      driver: default
      config:
        - subnet: 172.10.2.0/23

services:
  tut07-db:
    build: ./db
    command: --default-authentication-plugin=mysql_native_password
    ports:
      - 3306:3306
    networks:
      tut07-backend:
        ipv4_address: 172.10.3.2
    env_file:
      - ./development.env
  tut07-www:
    build: ./www
    ports:
      - 8080:80
    volumes:
      - ./src:/var/www/html/
    networks:
      tut07-backend:
        ipv4_address: 172.10.2.2
      tut07-frontend:
        ipv4_address: 172.10.1.2
    depends_on:
      - tut07-db
    env_file:
      - ./development.env

现在我知道我会完全失明..。

在“海狸”中,我试图建立一种联系:

但是,当我测试连接时,我会得到以下响应:

我该如何解决这个问题?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2019-05-01 04:16:09

不要将localhost_compliant-db作为河狸中的服务器主机,而是尝试将其授予localhost

3306端口也绑定在主机上,因此来自主机的localhost:3306应该可以工作。

PS -我想海狸和码头组合堆栈都在同一台机器上。如果不是,您需要将localhost_compliant-db映射到主机能够理解的特定IP。

票数 11
EN

Stack Overflow用户

发布于 2020-06-17 08:50:22

对于在不同机器上运行DB的用户,可以执行以下操作:

首先,从容器所在的位置运行docker ps来获取容器的详细信息,包括Container ID

代码语言:javascript
复制
[root@test-001 ~]# docker ps 
CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS                    NAMES
1b02333fb3b9        tutum/nginx              "/usr/sbin/nginx"        6 weeks ago         Up 7 days           0.0.0.0:80->80/tcp       docker_nginx_1
8c1d234a3731        mariadb                  "docker-entrypoint.s…"   6 weeks ago         Up 7 days           0.0.0.0:3306->3306/tcp   docker_mysql_1

获取数据库容器的ID后,运行docker inspect CONTAINER_ID获取该容器的相关IP地址。

代码语言:javascript
复制
[root@test-001 ~]# docker inspect 8c1d234a3731 | grep -i IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "",
                    "IPAddress": "172.23.0.3",

在Dbeaver上,在添加新连接窗口时选择DB类型后,转到network settings (SSH, ...),然后将您的对接机详细信息放到。从主页中,在Server Host:中添加从docker inspect命令获得的IP,然后添加凭据。

这应该能行

票数 17
EN

Stack Overflow用户

发布于 2020-05-29 03:28:25

在我的例子中,我使用DBBeaver连接到端口3306上的MariaDB,但是我的容器端口没有映射到本地的3306端口,所以我只需要将端口配置添加到docker-compose.yml中。

代码语言:javascript
复制
ports:
- "3306:3306"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55931321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档