laravel - 在使用 docker exec 时评估容器内的 bash 表达式,而不是主机

标签 laravel docker

我目前正在尝试从我的 docker 主机运行这个命令:

docker exec container_name /bin/bash -c "touch .env; APP_KEY=$(php artisan key:generate | grep -o '\[.*]' | sed 's/[][]//g');"

问题是表达式 $(expression) 将由主机计算,其中 php 不在路径中,而它应该在路径中。

我如何告诉 docker 它应该使用容器 shell 来评估容器中的表达式?或者是否有另一种解决方法来实现这一点?

最佳答案

您需要以某种方式引用字符串以避免扩展(单引号),这意味着您还需要转义任何嵌套的单引号和其他转义字符:

docker exec container_name /bin/bash -c \
  'touch .env; APP_KEY=$(php artisan key:generate | grep -o \'\\\[.*]' | sed \'s\\/[][]//g\');'

或转义任何 shell 字符(如美元):

docker exec container_name /bin/bash -c \
  "touch .env; APP_KEY=\$(php artisan key:generate | grep -o '\[.*]' | sed 's/[][]//g');"

关于laravel - 在使用 docker exec 时评估容器内的 bash 表达式,而不是主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47479604/

相关文章:

docker - 创建新的通用 docker 机器时出错

python - Docker:从Web UI用户到Docker的运行Python解释器的输入

laravel - 使用 npm 安装 JS 包并使用 webpack laravel mix 进行编译

php - Laravel/PHP 中的 "/"和 "\"有什么区别?

php - 如何将以下 mysql 查询形成为 laravel 查询语法?

visual-studio - 需要有关.AspNetCore服务的Dockerfile和Kubernetes的帮助

Laravel 4 模型验证与 Controller 验证

php - Laravel 迁移 ip type ipv6 准备好了吗?

powershell - Entrypoint的exec形式通过shell执行

docker - CoreDNS 无法在 Kubernetes 集群中运行