Sequel Pro с Mysql в Docker

Я строю 2 docker-контейнера с помощью docker-compose. Я использую Docker на Mac, нет 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. Я начинающий докер.

Ответ 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

Ответ 2

Map host port 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"

Вы должны иметь возможность подключиться к docker mysql с помощью 127.0.0.1:4306

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

Ответ 3

В моем случае у меня проблема с mysql: 8, изменение на любые 5, и все в порядке

Ответ 4

Должно выглядеть немного больше:

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-сервер и drupal-web. Drupal-web связывает вашу службу базы данных. Обе службы имеют собственные переменные среды.