Не могу получить доступ к MySQL db из SQLyog после запуска docker compose file - PullRequest
0 голосов
/ 23 января 2020

Я запускаю файл compose, который устанавливает mysql в контейнер и инициализирует базу данных. Я могу войти в контейнер и увидеть таблицы, которые создаются.

Но когда я пытаюсь войти в MySQL DB, используя SQLyog, не могу подключиться в этот раз. Я использовал publi c IP моего экземпляра ec2. В неудачном случае я использовал порт 3308 хост-машины. Если я использую порт по умолчанию (3306), он подключается !!! Но в порту 3306 мне нужно запустить другой сервер MySQL. Итак, чтобы запустить через порт 3308 хост-машины, что делать с моей стороны?

Это мой составной файл:

cat docker-compose.yml

version: '3' 
volumes:
        failed_db_data: {}

services:
    faileddb:
        build:
            context: .
            dockerfile: ./faileddb/Dockerfile
            args:
                - database=${FAILED_DB}
                - password=${FAILED_DB_PASSWORD}
        image: failed_db_image
        volumes:
            - failed_db_data:/var/lib/mysql
        ports:
            - "3308:3308"

Это Dockerfile:

cat faileddb/Dockerfile

FROM mysql:5.7.15

ARG database
ARG password

MAINTAINER me
ENV MYSQL_DATABASE=${database} \
    MYSQL_ROOT_PASSWORD=${password}
ADD ./faileddb/failed100.sql /docker-entrypoint-initdb.d
EXPOSE 3308

Это файл .env

cat .env

#FAILED_DB
FAILED_DB_PORT=3308
FAILED_DB=failed
FAILED_DB_USER=root
FAILED_DB_PASSWORD=123

Это моя древовидная команда, из которой существует файл compose:

tree -a
.
├── .env
├── docker-compose.yml
└── faileddb
    ├── Dockerfile
    └── failed100.sql

1 directory, 4 files

Теперь я создаю его:

docker-compose up -d

Creating network "reve_default" with the default driver
Creating volume "reve_failed_db_data" with default driver
Building faileddb
Step 1/7 : FROM mysql:5.7.15
5.7.15: Pulling from library/mysql
6a5a5368e0c2: Pull complete
0689904e86f0: Pull complete
486087a8071d: Pull complete
3eff318f6785: Pull complete
3df41d8a4cfb: Pull complete
1b4a00485931: Pull complete
0bab0b2c2630: Pull complete
264fc9ce512d: Pull complete
e0181dcdbbe8: Pull complete
53b082fa47c7: Pull complete
e5cf4fe00c4c: Pull complete
Digest: sha256:966490bda4576655dc940923c4883db68cca0b3607920be5efff7514e0379aa7
Status: Downloaded newer image for mysql:5.7.15
 ---> 18f13d72f7f0
Step 2/7 : ARG database
 ---> Running in 3d0dedd7e51f
Removing intermediate container 3d0dedd7e51f
 ---> bf054f294f4b
Step 3/7 : ARG password
 ---> Running in 0f09ff73a201
Removing intermediate container 0f09ff73a201
 ---> 9948007a0fc0
Step 4/7 : MAINTAINER me
 ---> Running in 4b11b4bba056
Removing intermediate container 4b11b4bba056
 ---> be09d8a1ad2a
Step 5/7 : ENV MYSQL_DATABASE=${database}     MYSQL_ROOT_PASSWORD=${password}
 ---> Running in 0ad7701bc7d4
Removing intermediate container 0ad7701bc7d4
 ---> 9c28be0c1367
Step 6/7 : ADD ./faileddb/failed100.sql /docker-entrypoint-initdb.d
 ---> d8ab45637fca
Step 7/7 : EXPOSE 3308
 ---> Running in f3eda2d36bbe
Removing intermediate container f3eda2d36bbe
 ---> 4b16e6a06593
Successfully built 4b16e6a06593
Successfully tagged failed_db_image:latest
WARNING: Image for service faileddb was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating reve_faileddb_1 ... done

Проверка работоспособности:

docker ps -a

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                              NAMES
217acd44a1df        failed_db_image     "docker-entrypoint.s…"   8 seconds ago       Up 7 seconds        3306/tcp, 0.0.0.0:3308->3308/tcp   reve_faileddb_1

введено в контейнер сейчас:

docker exec -it 217acd44a1df bash

введено в MySQL и проверено, в порядке ли таблицы, найдены те Хорошо, а также.

mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.15 MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| failed             |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)
mysql> use failed;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

Теперь я пытаюсь войти в систему, используя SQLyog (с моего windows компьютера, используя publi c IP экземпляра ec2):

SQLyog can't connect host machine 3308 port

Что мне здесь не хватает? Заранее спасибо.

1 Ответ

0 голосов
/ 26 апреля 2020

Переадресация портов была неправильной. Это должно быть

3308:3306

вместо

3308:3308
...