Andockfenster.io-init.d-Skript funktioniert nicht bei start-container
Ich habe einen container mit odoo auf es auf das dir "/opt/odoo/".
Einem init-Skript "/etc/init.d/odoo-server"
#!/bin/bash
### BEGIN INIT INFO
# Provides: odoo
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start openerp daemon at boot time
# Description: Enable service provided by daemon.
# X-Interactive: true
### END INIT INFO
## more info: http://wiki.debian.org/LSBInitScripts
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
DAEMON=/opt/odoo/openerp-server
NAME=odoo
DESC=odoo
CONFIG=/etc/odoo-server.conf
LOGFILE=/var/log/odoo/odoo-server.log
PIDFILE=/var/run/${NAME}.pid
USER=odoo
export LOGNAME=$USER
test -x $DAEMON || exit 0
set -e
function _start() {
start-stop-daemon --start --quiet --pidfile $PIDFILE --chuid $USER:$USER --background --make-pidfile --exec $DAEMON -- --config $CONFIG --logfile $LOGFILE
}
function _stop() {
start-stop-daemon --stop --quiet --pidfile $PIDFILE --oknodo --retry 3
rm -f $PIDFILE
}
function _status() {
start-stop-daemon --status --quiet --pidfile $PIDFILE
return $?
}
case "$1" in
start)
echo -n "Starting $DESC: "
_start
echo "ok"
;;
stop)
echo -n "Stopping $DESC: "
_stop
echo "ok"
;;
restart|force-reload)
echo -n "Restarting $DESC: "
_stop
sleep 1
_start
echo "ok"
;;
status)
echo -n "Status of $DESC: "
_status && echo "running" || echo "stopped"
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|restart|force-reload|status}" >&2
exit 1
;;
esac
exit 0
dann Mach ich
root@cca438c81a87:/# update-rc.d odoo-server defaults
Adding system startup for /etc/init.d/odoo-server ...
/etc/rc0.d/K20odoo-server -> ../init.d/odoo-server
/etc/rc1.d/K20odoo-server -> ../init.d/odoo-server
/etc/rc6.d/K20odoo-server -> ../init.d/odoo-server
/etc/rc2.d/S20odoo-server -> ../init.d/odoo-server
/etc/rc3.d/S20odoo-server -> ../init.d/odoo-server
/etc/rc4.d/S20odoo-server -> ../init.d/odoo-server
/etc/rc5.d/S20odoo-server -> ../init.d/odoo-server
Wenn ich starten Sie das Andockfenster mit dem Andockfenster starten Sie den odoo-server nicht starten, wenn ich innerhalb des andockfensters /etc/init.d/odoo-server zu starten es funktioniert ok...
was ist passiert?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Docker Container, in der Regel nicht über eine funktionierende init-system. Wenn Sie einfach eine einzelne service-beginnen Sie einfach, dass.
Wenn Sie etwas komplexer ist, schauen Sie auf supervisord oder runit.
Container sind nicht für virtuelle Maschinen.
Wenn Sie sich für ein Docker-image, das verhält sich ähnlich wie eine vollständige geblasen VM mit init-system, nehmen Sie einen Blick auf phusion baseimage
Nun habe ich verfolgt, den Fehler in einigen Stunden Arbeit.
Den Grund des Problems, dass
start-stop-daemon
, die Haupt-daemon starter/tester/stopper Werkzeug des debian-Systems, prüft auf die Existenz eines Dämons durch die Untersuchung der virtuellen soft-link des-daemon-Prozess in/proc/<pid>/exe
(es soll das binäre image der Prozess gestartet wurde).Nun das problem ist, dass im Andockfenster, ist diese soft-link einfach nicht funktionieren standardmäßig. Es ist, weil Andockfenster zu benutzen, strengen Sicherheits-Richtlinien in der Standard-Installation (es wird hauptsächlich zum ausführen von nicht identifizierten software).
Gibt es viele workarounds für die Aufgabe, einige Bedürfnisse ändern Sie die Berechtigungen-Einstellungen von einem container, einige nicht. Zwei Beispiele:
start-stop-daemon
mit der--test
und--exec
flags--cap-add=SYS_ADMIN
option, um diedocker run
Befehl (keine Sorge, ist es nicht geben Ihre docker-container alle sysadm-Berechtigungen, es ist wohl nur eine Vorsichtsmaßnahme für den produktiven Einsatz)Neben diesen, auch
systemd
funktioniert nicht im Andockfenster, obwohl es wahrscheinlich eher ein Nachteil von systemd, wie der docker. Statt dersystemd
, upstart verwendbar ist.P. s.: docker-Entwickler/- Befürworter sagen oft: "Container sind keine VMs" und ähnliches. Aber, die in der alltäglichen Erfahrung, gibt es keinen so wirklich starken Unterschied zwischen den beiden, und für eine produktive Andockfenster Nutzung der software, zumindest eine minimale Unterstützung eines VPS-like-Funktion wäre sicherlich sinnvoll. Hoffentlich auch die docker-Entwicklung konzentrieren Ihre Bemühungen in dieser Richtung in Naher Zukunft.
Fand ich, dass der Dienst nicht gestartet ist, weil der
/usr/sbin/policy-rc.d
gibt eine 101 code:Finden Sie unter: http://jpetazzo.github.io/2013/10/06/policy-rc-d-do-not-start-services-automatically/
- Und Andockfenster-set, bis Sie wieder 101 in einem container.
Also, ändern Sie das Skript auf build funktioniert, können Sie eine
build.sh
laufen inDockerfile
und läuft unter script:/etc/init.d/postgresql
ließ sich nicht startenSieht aus wie dein Kram ist nicht richtig, anstelle von #!/bin/bash sollte es sein #! /bin/sh
Finden Sie unter: https://unix.stackexchange.com/questions/124566/how-to-debug-init-d-script-that-isnt-being-run