2015-01-02 2 views
2

У меня есть команда, которая прекрасно работает в оболочке:Перевести команду Баша на докер CMD

start-stop-daemon --quiet --oknodo --start --pidfile /run/my.pid --background --make-pidfile --exec /opt/socat-1.7.2.4/socat PTY,link=/dev/ttyMY,echo=0,raw,unlink-close=0 TCP-LISTEN:9334,reuseaddr,fork

Теперь я хочу, чтобы запустить эту команду из Докер контейнера при запуске. Таким образом, в нижней части Dockerfile у меня есть:

CMD ["bash", "start-stop-daemon", "--quiet", "--oknodo", "--start", "--pidfile", "/run/myprocess.pid", "--background", "--make-pidfile", "--exec", "/opt/socat-1.7.2.4/socat", "PTY,link=/dev/ttyPROCESS,echo=0,raw,unlink-close=0", "TCP-LISTEN:9334,reuseaddr,fork"]

Однако контейнер выходит с ошибкой:

/sbin/start-stop-daemon: /sbin/start-stop-daemon: cannot execute binary file 

Я думаю, что есть что-то не так с синтаксисом CMD. Есть идеи?

ответ

0

Использование супервизора, кажется, более элегантное решение: https://docs.docker.com/articles/using_supervisord/

[supervisord] 
nodaemon=true 

[program:sshd] 
command=/usr/sbin/sshd -D 

[program:socat] 
command=/bin/bash -c socat PTY,link=/dev/ttyCUSTOM,echo=0,raw,unlink-close=0 TCP-LISTEN:%(ENV_SERIAL_PORT)s,reuseaddr,fork 
0

Вы хотите сделать bash -c <command> вместо bash <command>.

Измените ваш CMD на:

CMD ["bash", "-c", "start-stop-daemon", ...] 
+0

Это помогает, но теперь я получаю ошибку: старт-стоп-демон : нужен один из --start или --stop или --status. Кажется, что команда не обрабатывается правильно. –

0

Вам не нужно, чтобы перевести вашу команду, используйте shell form для команды CMD: CMD command param1 param2

CMD start-stop-daemon --quiet --oknodo --start --pidfile /run/my.pid --background --make-pidfile --exec /opt/socat-1.7.2.4/socat PTY,link=/dev/ttyMY,echo=0,raw,unlink-close=0 TCP-LISTEN:9334,reuseaddr,fork 
1

Узнайте, что полный путь к start-stop-daemon, запустив which start-stop-daemon, а затем использовать:

CMD ["/full_path_to_the_bin_file/start-stop-daemon", "--quiet", "--oknodo", "--start", "--pidfile", "/run/my.pid", "--background", "--make-pidfile", "--exec", "/opt/socat-1.7.2.4/socat", "PTY,link=/dev/ttyMY,echo=0,raw,unlink-close=0", "TCP-LISTEN:9334,reuseaddr,fork"]

вместо CMD, вы можете использовать ENTRYPOINT

Смежные вопросы