首页 > 解决方案 > docker compose 命令:服务中“命令”选项的插值格式无效

问题描述

在我的 docker compose 中,我有以下命令:

command: bash -c 'while [[ "$(curl --connect-timeout 2 -s -o /dev/null -w ''%{http_code}'' https://mock-server:4000/readiness)" != "200" ]]; do echo ..; sleep 5; done; echo backend is up; npm start'

等待模拟服务器启动,然后运行后端的启动命令:

  backend:
    build: 
        context: ./test
        dockerfile: Dockerfile
    command: bash -c 'while [[ "$(curl --connect-timeout 2 -s -o /dev/null -w ''%{http_code}'' https://mock-server:4000/readiness)" != "200" ]]; do echo ..; sleep 5; done; echo backend is up; npm start'
    ports: 
      - "3015:3015"
    depends_on:
      - couchdb
      - redis
      - mock-server
    user: root

但我收到以下错误:

ERROR: Invalid interpolation format for "command" option in service "backend": "bash -c 'while [[ "$(curl --connect-timeout 2 -s -o /dev/null -w ''%{http_code}'' https://uds-mock-server:4000/readiness)" != "200" ]]; do echo ..; sleep 5; done; echo backend is up;; npm start'"

我看不出我的命令有什么问题。任何帮助表示赞赏

标签: bashdockerdocker-compose

解决方案


你需要逃避$with$$

command: bash -c 'while [[ "$(curl --connect-timeout 2 -s -o /dev/null -w ''%{http_code}'' https://mock-server:4000/readiness)" != "200" ]]; do echo ..; sleep 5; done; echo backend is up; npm start'


command: bash -c 'while [[ "$$(curl --connect-timeout 2 -s -o /dev/null -w ''%{http_code}'' https://mock-server:4000/readiness)" != "200" ]]; do echo ..; sleep 5; done; echo backend is up; npm start'

那应该可以解决构建问题


推荐阅读