Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
docker如何使用带引号的新命令提交docker_Docker_Nginx_Command Line Arguments - Fatal编程技术网

docker如何使用带引号的新命令提交docker

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

在制作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] 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;')