Как исправить ошибку "not unmarshal !! str` image: j ... `into config.RawService" при запуске docker compose в ecs-cli? - PullRequest
0 голосов
/ 30 января 2019

Я настраиваю контейнерное развертывание для своего проекта согласно этому документу AWS .Я настроил AWS CLI, чтобы выполнить шаги, описанные в документации.Я успешно создал образ тома Jenkins и Jenkins Docker и перенес его в репо на ECR.Я установил ECS-CLI для запуска файла компоновки докера, но я получаю "yaml: ошибки демаршала: \ n строка 2: не могу демонтировать !! изображение str: j ... в config.RawService" ошибка назапуск файла компоновки docker.

Я впервые использую docker compose, и когда я исследовал, я обнаружил, что это может быть проблемой версии.ECS-CLI теперь поддерживает все три версии docker compose, поэтому проблема не может быть в версии.

Команда: ecs-cli compose up up

docker-compose.yml (jenkins - это изображение мастера jenkins из документации):

jenkins:
  image:jenkins
  cpu_shares:100
  mem_limit:2000
  ports:"8080:8080","50000:50000" 
  volumes_from:jenkins_dv
jenkins_dv:
  image:jenkins_dv
  cpu_shares:100
  mem_limit:500

Фактический результат

ERRO [0000] Возможноне разбирать конфигурацию для проекта awsinfra: yaml: ошибки демаршала:

строка 2: невозможно отменить отправку !! str image:j... в config.RawService

строка 8: невозможно отменить маршализацию !! str image:j...в config.RawService

ERRO [0000] Невозможно открыть ECS Compose Project error = "yaml: unmarshal errors: \ n строка 2: невозможно отменить отправку !! str image:j... в config.RawService \ n строка 8:не может отменить сортировку !! str image:j... в config.RawService "

FATA [0000] Невозможно создать и прочитать ECS Compose Project error =" yaml: отменить ошибки: \ n строка 2: невозможно отменить маршализацию !! str image:j... в config.RawService \ n строка 8: невозможно разархивировать !! str image:j... в config.RawService "

1 Ответ

0 голосов
/ 31 января 2019

Имеется действительный YAML, но каждый ключ jenkins и jenkins_dv имеет в качестве значения многострочную простую скалярную строку (обычную, как в: без кавычек).И docker-compose не знает, что делать с этими строками, он ожидает сопоставление (Python dict)

То, что вы хотите получить, поскольку значения являются сопоставлениями, и для этого вам нужно, по крайней мере, использоватьиндикатор значения между ключом и значением.Индикатором значения в YAML является двоеточие (':'), за которым следует пробел (то есть новая строка, как с индикатором, следующим за jenkins, или пробел.

Try:

jenkins:
  image: jenkins
  cpu_shares: 100
  mem_limit: 2000
  ports: ["8080:8080", "50000:50000"]
  volumes_from: jenkins_dv
jenkins_dv:
  image: jenkins_dv
  cpu_shares: 100
  mem_limit: 500

IIRC значение для ports должно быть последовательностью, поэтому я изменил ее значение на последовательность стиля потока. Пробел после разделителя ввода (,) в этой последовательности не является строго необходимым, но делает вещи ИМХОболее читабельным. Вы также можете сделать:

  ports: 
  - "8080:8080"
  - "50000:50000"
...