Команды ENTRYPOINT и CMD с mongod приводят к ошибке неизвестного параметра

#mongodb #docker #boot2docker

#mongodb #docker #boot2docker

Вопрос:

Я использую несколько Dockerfiles для настройки своей серверной инфраструктуры. Один из файлов Dockerfile, который я создаю, — это сервер MongoDB, который будет связан с запущенным приложением веб-сервера на более позднем этапе. В настоящее время у меня проблема при запуске сервера MongoDB, я получаю следующую ошибку:

 "Error parsing command line: unknown option port 27017"
 

В моем Dockerfile у меня есть:

 CMD ["--port 27017", "--dbpath /data/db", "--smallfiles"]    
ENTRYPOINT ["/usr/bin/mongod"]
 

Когда я использую вместо приведенных выше команд следующие, все работает:

 CMD /usr/bin/mongod --port 27017 --dbpath /data/db --smallfiles
 

Я больше предпочитаю подход CMD — Array и ENTRYPOINT, но не могу понять, почему я получаю ошибку.

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

1. Как поклонник docker, я все же должен сказать, что есть serverfault.com это действительно то место, где должен быть размещен ваш вопрос. StackOverflow не является «корзиной дампа» для «всех вычислений», как это было когда-то. Теперь есть специальные сайты, на которых можно задать эти вопросы. StackOverflow предназначен только для «тем программирования».

Ответ №1:

При использовании синтаксиса json вам необходимо передавать каждый аргумент по отдельности. Он будет рассматривать каждый элемент как один, тогда как в синтаксисе, отличном от json, он будет разделен оболочкой и рассматриваться как два.

CMD ["--port", "27017", "--dbpath", "/data/db", "--smallfiles"] будет работать.

В качестве альтернативы, я не знаю, поддерживает ли это mongo, но большинство программ поддерживает, вы могли бы сделать это:

CMD ["--port=27017", "--dbpath=/data/db", "--smallfiles"] таким образом, он будет передан как один элемент, но будет интерпретирован mongo.