【问题标题】:Mysql port forwarding with docker and proxy使用 docker 和代理进行 Mysql 端口转发
【发布时间】:2021-08-02 19:33:13
【问题描述】:

我在尝试使用 docker 和两个端口转发时遇到问题。基本上我有:

  • 一个 docker 容器,托管一个 MySQL 数据库,在容器中的 3306 端口上运行
  • 容器的宿主机,其中端口XXXX通过docker-compose命令ports: - XXXX:3306链接到容器的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

提前感谢您的帮助。 最好的, 乙

【问题讨论】:

  • 这个问题与编程无关,因此在 SO 上是题外话。 SO 的 Serverfault 姊妹站点为此类服务器和网络基础设施相关问题提供支持。

标签: mysql docker portforwarding ssh-tunnel


【解决方案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}

希望对遇到同样情况的人有所帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    • 2020-11-19
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    相关资源
    最近更新 更多