2016-11-15 16 views
17

Tôi có một vô hướng YAML được ném lỗi sau khi tôi cố gắng để đánh giá docker-compose.yml tập tin của tôi:

ERROR: Invalid interpolation format for "environment" option in service "time_service": "${Time.now}"

YAML:

--- 
version: '2' 
services: 
    time_service: 
    build: "." 
    environment: 
     TIME: "${Time.now}" 

Làm thế nào tôi có thể duy trì sản lượng chuỗi tương tự như văn bản, nhưng tránh việc docker-compose giải thích nó như là nội suy chuỗi bị lỗi?

+0

Nó không phải là trình phân tích cú pháp YAML giải thích chuỗi đó. YAML không biết về '$ {}'. Việc diễn dịch được thực hiện bằng 'docker-compose' và được viết bằng Python, vì vậy thẻ ruby ​​cũng không phù hợp. – Anthon

+0

Tôi đã loại bỏ giả định không chính xác rằng đây là vấn đề YAML. Nó gây ra ít nhất một người khác [bị lừa và lãng phí thời gian] (https://stackoverflow.com/questions/45312806/how-to-escape-a-sign-in-an-ansible-host-vars-file) – Anthon

Trả lời

27

Bạn đang nhấn docker-compose substition biến, đó cũng là tài liệu here:

Both $VARIABLE and ${VARIABLE} syntax are supported. Extended shell-style features, such as ${VARIABLE-default} and ${VARIABLE/foo/bar}, are not supported.

You can use a $$ (double-dollar sign) when your configuration needs a literal dollar sign. This also prevents Compose from interpolating a value, so a $$ allows you to refer to environment variables that you don’t want processed by Compose.

docker-compose được viết bằng Python, như bạn thấy trên github, cơ chế tăng gấp đôi để có được ý nghĩa ban đầu của các ký tự đặc biệt có thể được tìm thấy trong nhiều chương trình, tôi cần sử dụng bản thân này, trong khi lập trình, như xa trở lại vào năm 1984.

9

Tìm thấy câu trả lời bằng cách sao chép các gợi ý cho % nhân vật trong this post

Nó đòi hỏi một dấu đôi đôla $$.

Vì vậy, tôi cần "$${Time.now}", mà đánh giá để "${Time.now}"

Các vấn đề liên quan