2013: потеряно соединение с сервером MySQL при «рукопожатии: чтение начального пакета связи», системная ошибка: 115 при попытке подключения

Создание образа для дампа mariadb. Не удается установить соединение с контейнером mariadb. У меня есть контейнер с MariaDB. Разрабатываю свой образ для периодического создания MySQL-дампа базы данных. Не удалось установить соединение между контейнером mariadump и контейнером MariaDB.

Docker-Compose

version: '3.3'
services:
    db:
        # image: 'mariadb'
        build: ./mariadbimage
        container_name: MariaDB
        volumes:
            - db_data:/var/lib/mysql
            # - ./etc/localtime:/etc/localtime:ro
            # - ./opt/mysql/backup:/opt/mysql/backup
        ports:  
            - "3306:3306"
        restart: always
        environment:   
            MYSQL_ROOT_PASSWORD: wordpress
            MYSQL_DATABASE: wordpress
            MYSQL_USER: wordpress
            MYSQL_PASSWORD: wordpress

    mariadump:
        container_name: MariaDump
        build: ./mariadumpimage
        environment:
            TZ: Europe/Berlin

        volumes:
            - ./ssh:/root/.ssh
        depends_on:
            - db
        links:
            - db

MariaDump Dockerfile

FROM mariadb/server
RUN apt-get update && apt-get -y install cron curl openssh-client 
ENV TINI_VERSION v0.17.0
ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /tini
RUN chmod +x /tini

ADD scripts /usr/local/bin/
RUN chmod 0755 /usr/local/bin/mariadumper.sh /usr/local/bin/docker-entrypoint.sh

ENTRYPOINT ["/tini", "-e", "143", "--", "docker-entrypoint.sh"]

Mariadump Entrypoint

MYSQL_USER=wordpress
MYSQL_PASSWORD=wordpress
MYSQL_HOST=host.docker.internal
MYSQL_PORT=3306

BACKUP_FILE=/var/backups/$(date +"%Y-%m-%d-%H%M%S")_${MYSQL_HOST}_mysqldump

MYSQL_OPTS="-u${MYSQL_USER} -p${MYSQL_PASSWORD} -h${MYSQL_HOST} -P${MYSQL_PORT}"
MYSQLDUMP_OPTS="--single-transaction --routines --triggers"

mysqldump ${MYSQL_OPTS} ${MYSQLDUMP_OPTS} --all-databases >${BACKUP_FILE}
RETVAL=$?

if [ "$RETVAL" == 0 ]; then
  echo Compressing backup using gzip compression method.
  gzip --best ${BACKUP_FILE}*
  RETVAL=$?
fi

if [ "$RETVAL" == 0 ]; then
    echo Backup finished successfully.
    exit 0 
else
    echo Backup failed with errors!
    exit 1
fi

Ошибка:

Got error: 2013: "Lost connection to MySQL server at 'handshake: reading inital communication packet', system error: 115" when trying to connect

person Arslan Liaqat    schedule 08.07.2019    source источник
comment
Вы создаете контейнеры с docker compose? Если да, опубликуйте файл docker-compose.yml, если не опубликуйте команду, которую вы используете для создания и запуска контейнеров, пожалуйста.   -  person Victor Calatramas    schedule 08.07.2019
comment
@VictorCalatramas обновил вопрос. Я использую docker compose.   -  person Arslan Liaqat    schedule 08.07.2019


Ответы (1)


Если вы хотите, чтобы контейнеры могли взаимодействовать, вы должны использовать свойство networks.

version: '3.3'
services:
    db:
        # image: 'mariadb'
        build: ./mariadbimage
        container_name: MariaDB
        volumes:
            - db_data:/var/lib/mysql
            # - ./etc/localtime:/etc/localtime:ro
            # - ./opt/mysql/backup:/opt/mysql/backup
        ports:  
            - "3306:3306"
        restart: always
        environment:   
            MYSQL_ROOT_PASSWORD: wordpress
            MYSQL_DATABASE: wordpress
            MYSQL_USER: wordpress
            MYSQL_PASSWORD: wordpress
        networks:
            - my-network-name

    mariadump:
        container_name: MariaDump
        build: ./mariadumpimage
        environment:
            TZ: Europe/Berlin

        volumes:
            - ./ssh:/root/.ssh
        depends_on:
            - db
        links:
            - db
        networks:
            - my-network-name
networks:
    my-network-name:
      driver: bridge

Затем контейнеры могут отправлять запросы друг другу, используя container-name или id:

http://MariaDB:3306/

В качестве предложения используйте только snake_case в файлах конфигурации.

person Victor Calatramas    schedule 08.07.2019
comment
в моем скрипте, что я буду использовать как MYSQL_HOST? - person Arslan Liaqat; 08.07.2019
comment
Вы должны использовать container_name контейнера, к которому хотите подключиться. - person Victor Calatramas; 08.07.2019
comment
mysqldump: Получена ошибка: 2002: Не удается подключиться к локальному серверу MySQL через сокет '/var/run/mysqld/mysqld.sock' (2) при попытке подключения - person Arslan Liaqat; 08.07.2019
comment
Похоже, что какой-то файл отсутствует, может быть, вы не установили mysql-server в контейнер? - person Victor Calatramas; 08.07.2019
comment
Я предполагаю, что вы создаете образ с Dockerfile, там вы должны запустить команду для его установки. - person Victor Calatramas; 08.07.2019
comment
Или, если вы не хотите связываться с этими вещами, используйте созданный образ из DockerHub: hub.docker .com / _ / mysql - person Victor Calatramas; 08.07.2019
comment
Я добавил свой файл докеров в сообщение. можешь взглянуть? - person Arslan Liaqat; 08.07.2019
comment
Возможно, вам потребуется добавить пакет mysql-server в вашу команду apt-get. - person Victor Calatramas; 08.07.2019