mysql 如何使用kingsquare和docker-compose从本地docker到远程数据库建立SSH隧道

rryofs0p  于 2022-11-21  发布在  Mysql
关注(0)|答案(2)|浏览(209)

我 的 新 职责 是 将 我们 的 项目 移植 到 dockers 中 。 这 意味 着 每个 开发 人员 机器 上 的 本地 代码 与 临时 服务 器 上 的 测试 数据 。 目前 , 代码 位于 同一 台 服务 器 上 , 因此 使用 本地 主机 ( 127.0.0.1 ) 连接 到 数据 库 。 dockers 当前 部署 并 可以 运行 单元 测试 , 在 不 需要 DB 的 情况 下 , 单元 测试 会 成功 。
我 尝试 使用 此处 提供 的 答案 :https://github.com/phpmyadmin/docker/issues/99 , 它 在 当时 失败 了 , 并 进行 了 各种 不同 的 尝试 , 最终 导致 尝试 从 容器 ( How do I complete this SSH tunnel from local development docker to staging database ) 内部 创建 SSH 隧道 。 我 已经 返回 尝试 使用 该 服务 , 因为 其他 选项 似乎 更加 复杂 或 不 可靠 。
我 已经 恢复 使用 kingsquare 镜像 , 它 允许 隧道 , 但 我 不 知道 ${SSH _ AUTH _ SOCK} 是 什么 , 也 不 知道 如何 使用 它 。 我 试 着 将 它 指向 SSH 密钥 , 但 ( 可能 很 明显 ) 失败 了 。
我 已经 包括 了 整个 docker-compose.yml , 因为 我 之前 没有 注意 到 的 一 个 错误 是 在 我 现有 的 docker ( 应用 程序 ) 中 没有 包括 网络 引用 。

version: '3'
services:
    tunnels:
        image: kingsquare/tunnel
        volumes:
            - '${SSH_AUTH_SOCK}:/ssh-agent'
        command: '*:3306:localhost:3306 -vvv user@[myserver->the IP of the machine hosting the DB?] -i /.ssh/openssh_ironman_justin  -p 2302'
        networks:
            mynetwork:
                aliases:
                    - remoteserver
    app:
        build:
            context: .
            dockerfile: .docker/Dockerfile
            args:
                APP_PATH: ${APP_PATH}
        image: laravel-docker
        env_file: .env
        ports:
            - 8080:80
            # We need to expose 443 port for SSL certification.
            - "443:443"
        volumes:
            - .:/var/www/jumbledown
        networks:
            - mynetwork
networks:
    mynetwork:
        driver: bridge

中 的 每 一 个
在 . env 文件 中 , 每个 开发 人员 都 有 以下 内容 , 在 SSH 隧道 完成 后 , 我 需要 更改 这些 内容 , 以便 它 使用 tunnel-DB 组合 :

DB_HOST=127.0.0.1 # As per answer, this will change to the IP address of the server containing the database.  I'll leave the current localhost reference rather than displaying the IP address of the machine.
DB_PORT=3306
DB_DATABASE=[central database or sharded version for testing data changes]
DB_USERNAME=[username]
DB_PASSWORD=[password]

格式
我 希望 能够 获得 应用 程序 容器 中 的 代码 , 能够 使用 远程 服务 器 上 的 数据 库 , 尽 可能 减少 部署 后 的 复杂 性 。

    • 更新 * * 我 解决 了 端口 问题 。
    • Update 2.5 * * 如果 我 使用 command: '*:3306:localhost:3306 -vvv [username]@[IP of DB host] -i [location on my PC of key file]/openssh_dev -p 2302' , 它 会 建立 连接 , 但 会 被 拒绝 , 原因 是 :
tunnels_1  | debug1: Trying private key: /.ssh/openssh_ironman_justin
tunnels_1  | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
tunnels_1  | @         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
tunnels_1  | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
tunnels_1  | Permissions 0755 for '/.ssh/openssh_dev ' are too open.
tunnels_1  | It is required that your private key files are NOT accessible by others.
tunnels_1  | This private key will be ignored.

格式
但是 我 该 如何 改变 挂载 文件 的 权限 呢 ? 可以 通过 Dockerfile 来 完成 吗 ? 或者 必须 在 启动 之前 就 已经 存在 了 ?

fsi0uk1n

fsi0uk1n1#

但是我该如何改变挂载文件的权限呢?可以通过Dockerfile来完成吗?或者必须在启动之前就已经存在了?
Dockerfile用于创建映像。基于该映像的容器将从您的主机装载目录并维护相同的主机权限。
您可以更改主机上文件的权限,Docker将在容器中使用相同的权限。

vlurs2pr

vlurs2pr2#

对于您的docker容器,127.0.0.1是它的localhost。要访问主机,您需要将主机更改为0.0.0.0。另一方面,如果您要连接到远程主机,则它将是your-host-ip-or-domain.com

相关问题