我 的 新 职责 是 将 我们 的 项目 移植 到 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'
, 它 会 建立 连接 , 但 会 被 拒绝 , 原因 是 :
- Update 2.5 * * 如果 我 使用
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 来 完成 吗 ? 或者 必须 在 启动 之前 就 已经 存在 了 ?
2条答案
按热度按时间fsi0uk1n1#
但是我该如何改变挂载文件的权限呢?可以通过Dockerfile来完成吗?或者必须在启动之前就已经存在了?
Dockerfile用于创建映像。基于该映像的容器将从您的主机装载目录并维护相同的主机权限。
您可以更改主机上文件的权限,Docker将在容器中使用相同的权限。
vlurs2pr2#
对于您的docker容器,
127.0.0.1
是它的localhost。要访问主机,您需要将主机更改为0.0.0.0
。另一方面,如果您要连接到远程主机,则它将是your-host-ip-or-domain.com
。