我试图运行内置在Web服务器中的PHP作为我的容器的启动,但是docker-compose up抱怨它无法解析我的docker-compose.yml中的`符号(反引号?反引号?)< / p>
这是我的docker-compose.yml
version: "3"
services:
sf-api:
image: reston/php:7.1
ports:
- "8000:8000"
volumes:
- ".:/tmp/target"
working_dir: "/tmp/target"
command: ["php","-S","`hostname -i`:8000"]
我尝试做的是让Web服务器绑定到容器外部IP而不是127.0.0.1。
编辑: 这是运行docker-compose up
的输出$ docker-compose up
Recreating storefrontapi_sf-api_1 ...
Recreating storefrontapi_sf-api_1 ... done
Attaching to storefrontapi_sf-api_1
sf-api_1 | Invalid address: `hostname -i`
storefrontapi_sf-api_1 exited with code 1
答案 0 :(得分:3)
您明确告诉docker-compose不要在shell中使用命令的json exec语法运行命令。如果您希望shell解析容器内的反引号,则需要使用shell运行命令。请注意,这将破坏信号处理之类的事情,因为pid 1中的shell将拦截并忽略SIGTERM(它假设它处于单用户模式,您不希望shell退出)。命令的字符串语法为您运行shell,或者您可以更改命令以显式启动shell。这些都应该有效:
command: ["/bin/sh", "-c", "php -S `hostname -i`:8000"]
command: "php -S `hostname -i`:8000"
答案 1 :(得分:0)
我确实第一次遇到了以下docker-compose.yml:
version: "3"
services:
sf-api:
image: reston/php:7.1
ports:
- "8000:8000"
volumes:
- ".:/tmp/target"
working_dir: "/tmp/target"
command: ["php","-S","0.0.0.0:8000"]
我绑定到任何可用接口。因为只有两个接口,所以它对我的情况有效:环回和eth0。可能并非每个人都如此。
是的,这是我提出的关于同一问题的又一次绊脚石,到此为止。再次。在这里留下答案,供将来我和其他人使用。