TL; DR: Использование:
CMD tangelo -np --port 9220
Вместо:
CMD "tangelo --port 9220"
Пояснение:
У вас есть два способа отладки проблемы:
Проверка журналов контейнера:
$ docker run -d test
28684015e519c0c8d644fccf98240d1465acabab6d16c19fd59c5f465b7f18af
$ sudo docker logs 28684015e519c
/bin/sh: 1: tangelo --port 9220: not found
Вместо того, чтобы работать в автономном режиме, запустите на переднем плане с -i
/ --interactive
(и дополнительно также -t
/ --tty
):
$ docker run -ti test
/bin/sh: 1: tangelo --port 9220: not found
Как видно из вышеизложенного, проблема в том, что tangelo --port 9220
интерпретируется как один аргумент. Разделите это, удалив кавычки:
CMD tangelo --port 9220 # this will use a shell
или используйте форму «exec» (предпочтительно, если вам не нужны какие-либо функции оболочки):
CMD ["tangelo", "--port", "9220"] # this will execute tangelo directly
или даже лучше использовать ENTRYPOINT
+ CMD
:
ENTRYPOINT ["tangelo"]
CMD ["--port", "9220"] # this will execute tangelo directly
После этого изменения у вас все еще будет проблема:
$ sudo docker run -ti test
...
[29/Apr/2018:02:43:39] TANGELO no such group 'nobody' to drop privileges to
Танжело жалуется на то, что внутри контейнера нет пользователя и группы с именем nobody
. Опять же, есть две вещи, которые вы можете сделать: добавить RUN
, чтобы создать пользователя и группу nobody
, или запустить Tangelo с параметром -np
/ --no-drop-privileges
:
ENTRYPOINT ["tangelo"]
CMD ["--no-drop-privileges", "--port", "9220"]
Хорошо, если во время сборки вы видите промежуточные контейнеры: Docker создает их для каждого шага сборки. Команды, которые вы указываете в ENTRYPOINT
или CMD
, не выполняются во время сборки, они просто записываются в окончательный образ.