linux - 如何为 Docker 使用制作跨操作系统的 sh 脚本?
问题描述
我在我的项目中使用 docker,主要是 Laravel 项目,它具有构建 MySQL 容器和应用程序容器的配置。
容器分别命名为“ db ”和“ app ”。
因此,.env文件在主机名“ db ”之后配置,以便正确初始化所服务的网络服务器
这会强制开发人员在容器内运行与数据库连接有关的适当命令,否则会出错,因为环境认为我们正在谈论计算机上的 mysql 实例。(正确的?)
因此,为了缓解这种情况,在项目根目录中制作了一个脚本。
./cmd.sh 工匠迁移(作品)
php artisan migrate (不) - 未知数据库
我的问题到此结束,我来这里是为了解决这个问题。
正如您可能看到的,这奇怪地特定于 MacOS 环境,而且确实如此。需要这个脚本来跨操作系统工作,这对 Linux 和 Windows 开发人员来说也意味着无痛,这对我来说有点困难。
那么,TLDR 中的问题:我怎样才能安排这种轻松的方法适用于所有操作系统?
使用当前方式存在以下问题:
Linux:
- 1000 是默认用户,而不是 33。只需将 33 更改为 1000 即可修复它
- 更改为 1000 使其不适用于 mac
视窗:
- bash 需要 powershell,否则(找不到 tty 输入设备)
- Powershell 无法读取 sh 语法
我有点想尝试远离使用乘法文件,每个操作系统一个,作为解决方案。
那么,我在这里缺少什么,这甚至是可行的吗?我在哪里可以读到有关使这可行的信息?
非常感谢您,对文字墙感到非常抱歉。
TLDR:对于 docker 项目,我如何制作一个可以为所有操作系统运行容器命令的脚本?
解决方案
使用如何从 Bash 脚本中检测操作系统的 inspo?,(感谢 Richard Barber 的链接),我设法解决了我的问题,使用 OSTYPE 变量来区分正在使用的操作系统。
对于 Windows,只需使用 bash 终端,Linux 或 MacOS 的设置都可以使用。
#!/bin/bash
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
USER="1000"
else
USER="33"
fi
artisan() {
docker-compose exec --user $USER app php artisan "$@"
}
"$@"
推荐阅读
- cordova - 为什么 cordova build electron --release 创建一个在应用程序屏幕的 2/3 处有调试信息的应用程序?
- arrays - 结构填充是否会影响数组的联合?
- xml - 如何使用 PowerShell 从此 XML 中提取 ErrorCode 和 ErrorDescription?
- vue.js - 自定义组件模糊
- reactjs - 用 props 反应传递的组件并装饰它
- multipart - fastify-multipart 崩溃服务
- azure-functions - 为什么建议禁用健康检查?
- c - 将伪代码转换为 C/C++ 源代码
- firebase - 如何将 Firebase 工具用于非 Google Workspace 的工作邮件
- python - 在 Pandas 中转置数据,行变成列