docker如何使用带引号的新命令提交docker
在制作docker的过程中,我必须将其命令从/bin/sh更改为docker如何使用带引号的新命令提交docker,docker,nginx,command-line-arguments,Docker,Nginx,Command Line Arguments,在制作docker的过程中,我必须将其命令从/bin/sh更改为nginx-g“daemon off;”“(正是这样) 我写道: docker commit --change="EXPOSE 80" --change='CMD ["nginx", "-g", "\"daemon off;\""]' ${arr[0]} mine/nginx_final 其中${arr[0]}展开为正确的docker容器 但是,当我尝试运行此docker时,它失败并出现错误: nginx: [emerg] une
nginx-g“daemon off;”“
(正是这样)
我写道:
docker commit --change="EXPOSE 80" --change='CMD ["nginx", "-g", "\"daemon off;\""]' ${arr[0]} mine/nginx_final
其中${arr[0]}
展开为正确的docker容器
但是,当我尝试运行此docker时,它失败并出现错误:
nginx: [emerg] unexpected end of parameter, expecting ";" in command line
Docker inspect也没有显示任何不好的内容:
"Cmd": [
"nginx",
"-g",
"\"daemon off;\""
],
预期,我预期“\”守护进程关闭\“
展开为“守护进程关闭”
但是我很确定有一个
代码>在deamon关闭后签名
。这个标志到哪里去了?我如何调试这个?(并修复它)Nginx无法处理包含引号的全局指令:“daemon off;”“
执行表格
被称为exec表单。进程将通过而不是通过shell运行。数组中的每个元素都成为exec的参数。额外的“
引号正在传递给nginx:
CMD ["nginx", "-g", "\"daemon off;\""]
exec('nginx', '-g', '"daemon off;"')
使用exec表单已在未更改的情况下传递空间,因此您只需:
CMD ["nginx", "-g", "daemon off;"]
exec('nginx' '-g' 'daemon off;')
壳型
称为外壳形式。带空格的全局指令参数需要在此处引用:
CMD nginx -g "daemon off;"
exec('sh', '-c', 'nginx -g "daemon off;"')
exec('nginx', '-g', 'daemon off;')
另一方面,解释该命令的shell将拆分空格上的参数,并尝试使用3个参数执行nginx
:
CMD nginx -g daemon off;
exec('sh', '-c', 'nginx -g daemon off;')
exec('nginx', '-g', 'daemon', 'off;')
为什么不使用Dockerfile?您不需要在CMD数组中引用参数,因为它们是直接传递给执行进程的,而不是通过shell。
CMD[“nginx”、“-g”、“daemon off;”]
就可以了。但不确定这会解决问题。
CMD nginx -g daemon off;
exec('sh', '-c', 'nginx -g daemon off;')
exec('nginx', '-g', 'daemon', 'off;')