在使用docker exec时,评估容器内的bashexpression式,而不是主机
我目前正试图从我的docker主机运行这个命令:
docker exec container_name /bin/bash -c "touch .env; APP_KEY=$(php artisan key:generate | grep -o '\[.*]' | sed 's/[][]//g');"
问题是,expression式$(expression式)将由主机评估,其中php不在path中,就像它应该是。
如何告诉docker它应该使用容器shell来评估容器中的expression式? 或者是否有另外的解决方法来完成呢?
解决scheme是使用单引号而不是双引号:
docker exec container_name /bin/bash -c 'touch .env; APP_KEY=$(php artisan key:generate | grep -o '\[.*]' | sed 's/[][]//g');'
在这种情况下,$expression式不会在主机命令中展开。
您需要引用string以避免扩展(单引号),这意味着您还需要转义任何嵌套的单引号和其他转义字符:
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');"
- 使用docker-ed应用程序从客户端到服务器的networking初始化滞后
- custon docker python image中的FileNotFoundError
- “/ bin / sh:1:[”apache2ctl“,在docker中找不到
- 在群体闲置一段时间后到达docker集装箱的高延迟
- Docker:构build映像时出现“lstat no such file or directory”错误。 文件在那里
- NGINX反向代理到docker容器运行web应用程序
- 容器退出而不是在后台运行
- 如何在Docker容器中为PhantomJS使用其他参数?
- 在Jenkins docker镜像中安装bundler