如何在docker-compose.yml文件中转义反引号?

时间:2017-12-06 10:29:10

标签: docker docker-compose

我试图运行内置在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

2 个答案:

答案 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。可能并非每个人都如此。

是的,这是我提出的关于同一问题的又一次绊脚石,到此为止。再次。在这里留下答案,供将来我和其他人使用。