Sequel Pro with Mysql in Docker

2020-05-25 07:52发布

问题:

I build 2 docker container with docker-compose. I use Docker on Mac, no 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

Everything works fine. I install Drupal successfully.

The problem is: I would like to connect SequelPro to my DB, but i dont get a connection to the mysql container. I'm a docker beginner.

回答1:

You forgot to expose your DB port to the host, so simply add

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

And then connect to the database in Sequel Pro using:

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

If you already have a local mysql database running on your host, change the port

ports: 
  - "4306:3306"

and then connect to port 4306 instead of 3306. Be aware, from the Drupal container, you will still use 3306



回答2:

Map host port 4306 (or any other available port) to docker mysql 3306 like:

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

You should be able to connect to docker mysql with 127.0.0.1:4306

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


回答3:

In my case i has problem with mysql:8, change to any 5 and all is ok



回答4:

Should look a bit more like this:

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

(Im not sure if defining the environment variables on a global level work, maybe someone who knows can correct my answer here and simplify it)

As you can see, you have 2 services, mysql-server and drupal-web. Drupal-web links your database service. Both services have their own environment variables.