如何在 docker-compose.yml 中的命令中使用 `echo` 来处理冒号(“:”)?

How use `echo` in a command in docker-compose.yml to handle a colon (":") sign?

这是我的 docker-compose.yml,

elasticsearch:
  ports:
  - 9200:9200/tcp
  image: elasticsearch:2.4
 volumes:
  - /data/elasticsearch/usr/share/elasticsearch/data:/usr/share/elasticsearch/data
 command: /bin/bash -c “echo 'http.cors.enabled: true' > /usr/share/elasticsearch/config/elasticsearch.yml"

它抛出错误:

Activating (yaml: [] mapping values are not allowed in this context at line 7, column 49

看来我不能在command中使用冒号:,是这样吗?

冒号是 YAML 引入字典的方式。如果你在一个值中有它,你只需要引用这个值,例如这样:

image: "elasticsearch:2.4"

或者使用块标量运算符之一,如下所示:

command: >
  /bin/bash -c “echo 'http.cors.enabled: true' > /usr/share/elasticsearch/config/elasticsearch.yml"

有关详细信息,请查看 YAML page on Wikipedia. You can always use something like this online YAML parser 以测试您的 YAML 语法。

格式正确后,您的第一份文档应如下所示:

elasticsearch:
  ports:
    - 9200:9200/tcp
  image: "elasticsearch:2.4"
  volumes:
    - /data/elasticsearch/usr/share/elasticsearch/data:/usr/share/elasticsearch/data
  command: >
    /bin/bash -c “echo 'http.cors.enabled: true' > /usr/share/elasticsearch/config/elasticsearch.yml"

(从键中缩进列表标记 (-) 并不是绝对必要的,但我发现它有助于使事情更容易阅读)

一个docker容器只能运行一个command。如果您想 运行 多个命令,请将它们放在 shell 脚本中并将其复制到图像中。