создание расширенного файла приводит к ошибке проверки

#docker-compose

#docker-compose

Вопрос:

Привет, у меня есть два файла компоновки, один из которых описывает, как организовать службы (docker-compose.yml), а другой — для создания образов (docker-compose.build.yml) одних и тех же служб. Я не уверен, имеет ли смысл разбивать один файл таким образом, но я только что обнаружил эту функцию и хочу поэкспериментировать с ней.

Я хочу сказать, что при использовании одного файла docker-compose build web все работает нормально. Когда я разделяю файл на 2, определенные выше, и использую docker-compose -f docker-compose.yml -f docker-compose.build.yml build web , я получаю следующую ошибку:

 ERROR: Validation failed, reason(s):
web.build.args contains null, which is an invalid type, it should be a string, or a number
  

Один файл выглядит как (single docker-compose.yml):

 version: '2'

services:
  web:
    image: registry.private:5000/mycompany/web:dev
    restart: unless-stopped
    ports:
    - "9000:9000"
    environment:
    - SQL_URL=jdbc:mysql://mysql:3306/mydb
    build:
      context: ./applications/web
      args:
      - VCS_REF
      - BUILD_DATE
      - http_proxy
  

После разделения первый файл docker-compose.yml выглядит следующим образом:

 version: '2'

services:
  web:
    image: registry.private:5000/mycompany/web:dev
    restart: unless-stopped
    ports:
    - "9000:9000"
    environment:
    - SQL_URL=jdbc:mysql://mysql:3306/mydb
  

И второй файловый docker-compose.build.yml выглядит следующим образом:

 version: '2'

services:
  web:
    build:
      context: ./applications/web
      args:
      - VCS_REF
      - BUILD_DATE
      - http_proxy
  

Этот простой пример не работает в моем эксперименте. Я хочу быть уверенным в этой функции, прежде чем идти дальше. Например, специализация файла compose для нашего CI.

Если кто-нибудь может сказать мне, где я ошибаюсь. Спасибо.

docker-compose версии 1.6.2, сборка 4d72027

Версия Docker 1.10.3, сборка 20f81dd


При использовании PyYAML происходит (services.???)web.build.аргументы — это массив, а не то, что docker-compose утверждает, что это (содержит) null.

 Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from yaml import load, dump
>>> document = """
... services:
...   web:
...     build:
...       context: ./applications/web
...       args:
...       - VCS_REF
...       - BUILD_DATE
...       - http_proxy
...       - app_path=target/universal/web-0.1-SNAPSHOT.tgz
... """
>>> print load(document)
{'services': {'web': {'build': {'args': ['VCS_REF', 'BUILD_DATE', 'http_proxy', 'app_path=target/universal/web-0.1-SNAPSHOT.tgz'], 'context': './applications/web'}}}}
  

Комментарии:

1. Похоже на ошибку. Я бы попробовал это с последней выпущенной версией (1.8.1), и если она все еще не работает, откройте проблему на github

2. Моим первым предположением было, что я делаю что-то ошибочное. Работает с compose 1.8.1, спасибо @dnephin.

3. @dnephin, вы должны указать это в ответе, чтобы Йоханн мог выбрать его и дать вам ваши законно заработанные очки 🙂

Ответ №1:

Похоже на ошибку. Я бы попробовал это с последней выпущенной версией (1.8.1), и если она все еще не работает, откройте проблему на github.