【问题标题】:Sequel Pro with Mysql in Docker在 Docker 中使用 Mysql 的 Sequel Pro
【发布时间】:2016-12-19 06:33:19
【问题描述】:

我用 docker-compose 构建了 2 个 docker 容器。我在 Mac 上使用 Docker,没有 boot2docker。

version: '2'
    services:
        drupal-web:
            image: drupal:latest
        ports:
            - "8080:80"
    depends_on:
            - mysql-server
    links:
            - mysql-server:mysql
    mysql-server:
        image: mysql
    environment:
        MYSQL_DATABASE: drupal
        MYSQL_ROOT_PASSWORD: root
        MYSQL_USER: drupal
        MYSQL_PASSWORD: drupal

一切正常。我成功安装了 Drupal。

问题是:我想将 SequelPro 连接到我的数据库,但我没有连接到 mysql 容器。 我是码头工人初学者。

【问题讨论】:

    标签: mysql docker sequelpro


    【解决方案1】:

    您忘记向主机公开您的数据库端口,所以只需添加

    mysql-server:
        image: mysql
        ports: 
          - "3306:3306"
        environment:
            MYSQL_ROOT_PASSWORD: root
            MYSQL_DATABASE: drupal
            MYSQL_USER: drupal
            MYSQL_PASSWORD: drupal
    

    然后使用以下命令连接到 Sequel Pro 中的数据库:

    user: root
    password: root
    host: localhost
    port: 3306
    

    如果您的主机上已经运行了本地 mysql 数据库,请更改端口

    ports: 
      - "4306:3306"
    

    然后连接到端口4306 而不是3306。请注意,在 Drupal 容器中,您仍将使用 3306

    【讨论】:

    • 显式暴露端口 3306 允许我使用我的 mac 上的 sequel pro 访问它。默认情况下它还没有暴露,我有点惊讶
    • 我收到“MySQL 说:无法加载身份验证插件 'caching_sha2_password':dlopen(/usr/local/lib/plugin/caching_sha2_password.so, 2): image not found”连接
    • 我花了几个小时才发现问题确实是另一个数据库在本地相同的 3306 端口上运行,因此没有让我的 sequel pro 连接到 docker 的数据库。我如上所述更改了端口,我的问题得到了解决。谢谢大佬!
    【解决方案2】:

    将主机端口 4306(或任何其他可用端口)映射到 docker mysql 3306,例如:

    mysql-server:
            image: mysql
        environment:
            MYSQL_DATABASE: drupal
            MYSQL_ROOT_PASSWORD: root
            MYSQL_USER: drupal
            MYSQL_PASSWORD: drupal
        ports:
          - "4306:3306"
    

    您应该能够使用 127.0.0.1:4306 连接到 docker mysql

    mysql -u drupal -h 127.0.0.1 -P 4306 -p
    

    【讨论】:

      【解决方案3】:

      在我的情况下,我的 mysql:8 有问题,更改为任何 5 就可以了

      【讨论】:

        【解决方案4】:
        version: "3.8"
        services:
                  db-1:
                    container_name: db-1
                    image: mysql:5.7
                    restart: always
                    environment:
                      MYSQL_DATABASE: 'db'
                      # So you don't have to use root, but you can if you like
                      MYSQL_USER: 'user'
                      # You can use whatever password you like
                      MYSQL_PASSWORD: 'password'
                      # Password for root access
                      MYSQL_ROOT_PASSWORD: 'password'
                    ports:
                      # <Port exposed> : < MySQL Port running inside container>
                      - '3306:3306'
                    expose:
                      # Opens port 3306 on the container
                      - '3306'
                      # Where our data will be persisted
                    volumes:
                      - my-db:/var/lib/mysql
        volumes:
          my-db:
        

        这在今天很好用。但是,当我使用image: mysql:latest时它不起作用

        【讨论】:

          【解决方案5】:

          如果您在 docker 中运行 MySQL,您可能会遇到错误消息 Host '172.18.0.1' is not allowed to connect to this MySQL server。原因是,在 MySQL 中,每个数据库用户都定义了一个用户可以连接的 IP 地址。默认情况下,“root”用户的 IP 地址设置为 127.0.0.1 或 localhost。但由于我们在 docker 上运行 MySQL 服务器,我们不会从该 IP 地址连接到服务器。 您可以在https://github.com/docker-library/mysql/issues/275了解更多信息

          对我有用的解决方案:

          docker exec -it mysql5.7.16 mysql -uroot -p123456
          
          update mysql.user set host='%' where user='root';
          
          flush privileges;
          

          【讨论】:

            【解决方案6】:

            应该看起来更像这样:

            version: '2'
            services:
                mysql-server:
                    image: mysql
                    environment:
                        MYSQL_ROOT_PASSWORD: root
                        MYSQL_DATABASE: drupal
                        MYSQL_USER: drupal
                        MYSQL_PASSWORD: drupal
            
                drupal-web:
                    image: drupal:latest
                    ports:
                        - "8080:80"
                    depends_on:
                        - mysql-server
                    links:
                        - mysql-server:mysql-server
                    environment:
                        MYSQL_DATABASE: drupal
                        MYSQL_USER: drupal
                        MYSQL_PASSWORD: drupal
            

            (我不确定在全局级别定义环境变量是否有效,也许知道的人可以在这里更正我的答案并简化它)

            如您所见,您有 2 个服务,mysql-server 和 drupal-web。 Drupal-web 链接您的数据库服务。两种服务都有自己的环境变量。

            【讨论】:

            • 我的文件工作正常,唯一的问题是我无法从外部访问我的数据库。
            • 同样的问题,我还是没找到原因……你有消息了吗?
            猜你喜欢
            • 1970-01-01
            • 2021-01-08
            • 2021-11-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-05-19
            • 2018-12-13
            • 2014-07-20
            相关资源
            最近更新 更多