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

Yuw*_*Yan 3 docker dockerfile docker-compose docker-machine

这是我的docker-compose.yml

\n
elasticsearch:\n  ports:\n  - 9200:9200/tcp\n  image: elasticsearch:2.4\n volumes:\n  - /data/elasticsearch/usr/share/elasticsearch/data:/usr/share/elasticsearch/data\n command: /bin/bash -c \xe2\x80\x9cecho 'http.cors.enabled: true' > /usr/share/elasticsearch/config/elasticsearch.yml"\n
Run Code Online (Sandbox Code Playgroud)\n

它抛出错误:

\n
\n

激活 (yaml: [] 映射值在此上下文中不允许,位于第 7 行第 49 列

\n
\n

看起来好像我无法使用冒号:登录command这是真的吗?

\n

lar*_*sks 6

冒号是 YAML 引入字典的方式。如果您将其包含在值中,则只需引用该值即可,例如如下所示:

\n
image: "elasticsearch:2.4"\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
command: >\n  /bin/bash -c \xe2\x80\x9cecho \'http.cors.enabled: true\' > /usr/share/elasticsearch/config/elasticsearch.yml"\n
Run Code Online (Sandbox Code Playgroud)\n

有关更多信息,请查看Wikipedia 上的YAML页面。您始终可以使用类似在线 YAML 解析器的工具来测试您的 YAML 语法。

\n

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

\n
elasticsearch:\n  ports:\n    - 9200:9200/tcp\n  image: "elasticsearch:2.4"\n  volumes:\n    - /data/elasticsearch/usr/share/elasticsearch/data:/usr/share/elasticsearch/data\n  command: >\n    /bin/bash -c \xe2\x80\x9cecho \'http.cors.enabled: true\' > /usr/share/elasticsearch/config/elasticsearch.yml"\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

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

\n