Перенаправление портов Mysql с докером и прокси

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

  • Докер-контейнер, в котором размещается база данных MySQL, работающая на порту 3306 в контейнере.
  • Хост контейнера, где порт XXXX связан с 3306 контейнера командой docker-compose ports: - XXXX:3306; Я могу получить доступ к своему контейнеру на хосте с помощью PhpMyadmin. Так что пока все хорошо
  • Я создаю бридж с прокси-сервером на порту 3336, созданном с помощью команды: ssh -i key.pem -R 3336:localhost:XXXX ubuntu@IP
  • Затем у меня есть клиент (скажем, Mysql Workbench), который подключен к прокси-серверу с помощью другого туннеля: ssh -i key.pem -L 3306:3336 ubuntu@IP

Я попытался обобщить все на следующем рисунке, где XXXX — это 3306 (зеленая рамка). Когда я пытаюсь подключиться к базе данных с помощью этого довольно сложного метода, мне это удается, когда XXXX=3306. Однако, например, когда XXXX=8701, это больше не работает. У вас есть идеи, почему? Ошибка, которую я получаю, это классический тайм-аут: UnhandledPromiseRejectionWarning: Error: connect ETIMEDOUT

Спасибо заранее за вашу помощь. Лучший, Б

введите здесь описание изображения


person Bastien L.    schedule 12.05.2021    source источник
comment
Этот вопрос не имеет никакого отношения к программированию, поэтому здесь, на SO, он не по теме. Родственный сайт Serverfault SO предоставляет поддержку по вопросам, связанным с сервером и сетевой инфраструктурой, подобным этому.   -  person Shadow    schedule 12.05.2021


Ответы (1)


Я обнаружил проблему, связанную с файлом docker-compose.yml; Раньше у меня было:

version: "3.7"

services:
  db:
    build: 
       context: ./database
    command: --default-authentication-plugin=mysql_native_password  --sql_mode=""
    restart: always
    cap_add:
      - SYS_NICE
    volumes:
      - db_data:/var/lib/mysql
    ports:
      - ${MYSQL_HOST_PORT}:${MYSQL_PORT}
    environment:
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_TCP_PORT: ${MYSQL_HOST_PORT}
    env_file: ./.env

Хитрость заключалась в том, чтобы иметь один и тот же порт внутри и снаружи контейнера ${MYSQL_HOST_PORT}:${MYSQL_HOST_PORT}

Надеюсь, это поможет другим в такой же ситуации

person Bastien L.    schedule 12.05.2021