22.05.2018

Docker: Lessons learned - Logging

After some time working with docker here my experiences:

Some days ago i created my own container with a minimal web service.

Here the ncweb.sh:
#!/bin/ash
sed -i  's/Hostname:.*/Hostname: '$HOSTNAME'/g' index.html
while true; do { echo -e 'HTTP/1.1 200 OK\r\n'; cat index.html;}  | nc  -l -p 8080  2>&1 >> logfile; done 
This is the Dockerfile:
FROM alpine

WORKDIR /tmp

RUN mkdir ncweb

ADD .  /tmp

ENTRYPOINT [ "/tmp/ncweb.sh" ]

After building the image
docker build -t ncweb:0.4 .
And starting the container:
docker run -d -p 8080:8080 ncweb:0.4 --name ncweb0.4
I was able to connect to the container and view the log:

To get the right command:
docker ps  |grep  ncweb:0.4 |awk '{print "docker exec -it "$1" ash"}'
and then use the output:
docker exec -it e4f9960fc8e5 ash
alpine:~/ncweb# docker exec -it e4f9960fc8e5 ash
/tmp # ls
Dockerfile  hexdump     index.html  logfile     ncweb       ncweb.sh
/tmp # cat logfile 
GET / HTTP/1.1
Host: 192.168.178.46:8080
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:59.0) Gecko/20100101 Firefox/59.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en,de;q=0.7,en-US;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0

Thu May 10 10:01:23 UTC 2018 request done
But this is not the right way.
If i change the ncweb.sh to
#!/bin/ash
sed -i  's/Hostname:.*/Hostname: '$HOSTNAME'/g' index.html
while true; do { echo -e 'HTTP/1.1 200 OK\r\n'; cat index.html;}  | nc  -l -p 8080 ;done 
then you can do the following (after building a new container version):

alpine:~/ncweb# docker run -d -p 8080:8080 ncweb:0.5 --name ncweb0.5

9589f77fc289a3713354a365f8f08098279e6d0e893de99a0431d8fbd62c834a

alpine:~/ncweb# docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES

9589f77fc289        ncweb:0.5           "/tmp/ncweb.sh --n..."   8 seconds ago       Up 7 seconds        0.0.0.0:8080->8080/tcp   gracious_archimedes
To get the logs (which are written to STDOUT):

alpine:~/ncweb# docker logs -f 9589f77fc289

GET / HTTP/1.1

Host: 192.168.178.46:8080

User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:59.0) Gecko/20100101 Firefox/59.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: en,de;q=0.7,en-US;q=0.3

Accept-Encoding: gzip, deflate

Connection: keep-alive

Upgrade-Insecure-Requests: 1

Cache-Control: max-age=0


Conclusion: It is better to use STDOUT than local logfiles. Or even better: use syslog or other central logging mechanisms.

Related posts:



18.05.2018

Virtualbox: vboxdrv.sh: failed & Run 'make oldconfig && make prepare'

After updating to ubuntu 18.04 i had to reinstall virtualbox:


# dpkg -i virtualbox-5.2_5.2.10-122088~Debian~stretch_amd64.deb 
Vormals nicht ausgewähltes Paket virtualbox-5.2 wird gewählt.
(Lese Datenbank ... 378316 Dateien und Verzeichnisse sind derzeit installiert.)
Vorbereitung zum Entpacken von virtualbox-5.2_5.2.10-122088~Debian~stretch_amd64.deb ...
Entpacken von virtualbox-5.2 (5.2.10-122088~Debian~stretch) ...
virtualbox-5.2 (5.2.10-122088~Debian~stretch) wird eingerichtet ...
addgroup: Die Gruppe »vboxusers« existiert bereits als Systemgruppe. Programmende.
vboxdrv.sh: failed: Look at /var/log/vbox-install.log to find out what went wrong.

There were problems setting up VirtualBox.  To re-start the set-up process, run
  /sbin/vboxconfig
as root.
Trigger für systemd (237-3ubuntu10) werden verarbeitet ...
Trigger für ureadahead (0.100.0-20) werden verarbeitet ...
Trigger für gnome-menus (3.13.3-11ubuntu1) werden verarbeitet ...
Trigger für bamfdaemon (0.5.3+18.04.20180207.2-0ubuntu1) werden verarbeitet ...
Rebuilding /usr/share/applications/bamf-2.index...
Trigger für desktop-file-utils (0.23-1ubuntu3) werden verarbeitet ...
Trigger für mime-support (3.60ubuntu1) werden verarbeitet ...
Trigger für hicolor-icon-theme (0.17-2) werden verarbeitet ...
Trigger für shared-mime-info (1.9-2) werden verarbeitet ...
But this just failed with the following error (i am running my own kernel because of suspend to disk issues) inside /var/log/vbox-install.log:

test -e include/generated/autoconf.h -a -e include/config/auto.conf || (        \
echo >&2;                            \
echo >&2 "  ERROR: Kernel configuration is invalid.";        \
echo >&2 "         include/generated/autoconf.h or include/config/auto.conf are missing.";\
echo >&2 "         Run 'make oldconfig && make prepare' on kernel src to fix it.";    \
echo >&2 ;                            \
/bin/false)
mkdir -p /lib/modules/4.17.0-rc3/misc

and at the end:

/tmp/vbox.0/linux/VBoxPci-linux.c:92:40: error: implicit declaration of function ‘pci_get_bus_and_slot’; did you mean ‘pci_get_domain_bus_and_slot’? [-Werror=implicit-function-declaration]
 # define PCI_DEV_GET_SLOT(bus, devfn)  pci_get_bus_and_slot(bus, devfn)
                                        ^
/tmp/vbox.0/linux/VBoxPci-linux.c:397:15: note: in expansion of macro ‘PCI_DEV_GET_SLOT’
     pPciDev = PCI_DEV_GET_SLOT(uBus, uDevFn);
               ^~~~~~~~~~~~~~~~
/tmp/vbox.0/linux/VBoxPci-linux.c:397:13: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
     pPciDev = PCI_DEV_GET_SLOT(uBus, uDevFn);
             ^
/tmp/vbox.0/linux/VBoxPci-linux.c: In function ‘vboxPciOsDevInit’:
/tmp/vbox.0/linux/VBoxPci-linux.c:648:17: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
         pPciDev = PCI_DEV_GET_SLOT((pIns->HostPciAddress) >> 8,
                 ^
cc1: some warnings being treated as errors
scripts/Makefile.build:312: recipe for target '/tmp/vbox.0/linux/VBoxPci-linux.o' failed
make[2]: *** [/tmp/vbox.0/linux/VBoxPci-linux.o] Error 1
Makefile:1568: recipe for target '_module_/tmp/vbox.0' failed
make[1]: *** [_module_/tmp/vbox.0] Error 2
/tmp/vbox.0/Makefile.include.footer:101: recipe for target 'vboxpci' failed
make: *** [vboxpci] Error 2

Starting virtualbox shows:


The virtual machine 'Docker on Alpine LInux' has terminated unexpectedly during startup with exit code 1 (0x1).

Fehlercode:NS_ERROR_FAILURE (0x80004005)
Komponente:MachineWrap
Interface:IMachine {85cd948e-a71f-4289-281e-0ca7ad48cd89}

There are many postings out there how to fix this.
But is easier than everything written there:

Change to /lib/modules/4.17.0-rc3/misc and type:
modprobe vboxdrv
modprobe vboxnetadp
modprobe vboxnetflt

And after that everything works like expected.


13.05.2018

Ubuntu 16.04: Installation of chrome-browser fails with libnss3 (>= 2:3.22)

On my old laptop with ubuntu 16.04 i tried to install "chrome-browser":
# dpkg -i google-chrome-stable_current_amd64\ \(1\).deb 
Vormals nicht ausgewähltes Paket google-chrome-stable wird gewählt.
(Lese Datenbank ... 137351 Dateien und Verzeichnisse sind derzeit installiert.)
Vorbereitung zum Entpacken von google-chrome-stable_current_amd64 (1).deb ...
Entpacken von google-chrome-stable (64.0.3282.186-1) ...
dpkg: Abhängigkeitsprobleme verhindern Konfiguration von google-chrome-stable:
 google-chrome-stable hängt ab von libnss3 (>= 2:3.22); aber:
  Version von libnss3:amd64 auf dem System ist 2:3.21-1ubuntu4.

dpkg: Fehler beim Bearbeiten des Paketes google-chrome-stable (--install):
 Abhängigkeitsprobleme - verbleibt unkonfiguriert
Trigger für bamfdaemon (0.5.3~bzr0+16.04.20160415-0ubuntu1) werden verarbeitet ...
Rebuilding /usr/share/applications/bamf-2.index...
Trigger für gnome-menus (3.13.3-6ubuntu3) werden verarbeitet ...
Trigger für desktop-file-utils (0.22-1ubuntu5) werden verarbeitet ...
Trigger für mime-support (3.59ubuntu1) werden verarbeitet ...
Trigger für man-db (2.7.5-1) werden verarbeitet ...
Fehler traten auf beim Bearbeiten von:
 google-chrome-stable

But as you can see, this does not work ;-(
So let's clean up the installation:
# apt-get install -f
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.       
Statusinformationen werden eingelesen.... Fertig
Abhängigkeiten werden korrigiert ... Fertig
Die folgenden Pakete werden ENTFERNT:
  google-chrome-stable
0 aktualisiert, 0 neu installiert, 1 zu entfernen und 148 nicht aktualisiert.
1 nicht vollständig installiert oder entfernt.
Nach dieser Operation werden 186 MB Plattenplatz freigegeben.
Möchten Sie fortfahren? [J/n] 
(Lese Datenbank ... 137451 Dateien und Verzeichnisse sind derzeit installiert.)
Entfernen von google-chrome-stable (64.0.3282.186-1) ...
Trigger für man-db (2.7.5-1) werden verarbeitet ...
Trigger für bamfdaemon (0.5.3~bzr0+16.04.20160415-0ubuntu1) werden verarbeitet ...
Rebuilding /usr/share/applications/bamf-2.index...
Trigger für gnome-menus (3.13.3-6ubuntu3) werden verarbeitet ...
Trigger für desktop-file-utils (0.22-1ubuntu5) werden verarbeitet ...
Trigger für mime-support (3.59ubuntu1) werden verarbeitet ...
Several searches via google did not help.

But after a while i recognized, that chromium-browser is integrated into ubuntu. With this knowledge was easy:
# apt install chromium-browser
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.       
Statusinformationen werden eingelesen.... Fertig
Die folgenden Pakete wurden automatisch installiert und werden nicht mehr benötigt:
  libappindicator1 libcurl3 libdbusmenu-gtk4 libindicator7
Verwenden Sie »sudo apt autoremove«, um sie zu entfernen.
Die folgenden zusätzlichen Pakete werden Installiert
  chromium-browser-l10n chromium-codecs-ffmpeg-extra
Vorgeschlagene Pakete:
  webaccounts-chromium-extension unity-chromium-extension adobe-flashplugin
Die folgenden NEUEN Pakete werden installiert:
  chromium-browser chromium-browser-l10n chromium-codecs-ffmpeg-extra
0 aktualisiert, 3 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.
Es müssen noch 70,8 MB von 71,7 MB an Archiven heruntergeladen werden.
Nach dieser Operation werden 287 MB Plattenplatz zusätzlich benutzt.
Möchten Sie fortfahren? [J/n]         
Holen:1 http://de.archive.ubuntu.com/ubuntu xenial/universe amd64 chromium-browser amd64 49.0.2623.108-0ubuntu1.1233 [67,5 MB]
Holen:2 http://de.archive.ubuntu.com/ubuntu xenial/universe amd64 chromium-browser-l10n all 49.0.2623.108-0ubuntu1.1233 [3.355 kB]
Es wurden 42,6 MB in 7 s geholt (5.541 kB/s).                                                                          
Vormals nicht ausgewähltes Paket chromium-codecs-ffmpeg-extra wird gewählt.
(Lese Datenbank ... 137350 Dateien und Verzeichnisse sind derzeit installiert.)
Vorbereitung zum Entpacken von .../chromium-codecs-ffmpeg-extra_49.0.2623.108-0ubuntu1.1233_amd64.deb ...
Entpacken von chromium-codecs-ffmpeg-extra (49.0.2623.108-0ubuntu1.1233) ...
Vormals nicht ausgewähltes Paket chromium-browser wird gewählt.
Vorbereitung zum Entpacken von .../chromium-browser_49.0.2623.108-0ubuntu1.1233_amd64.deb ...
Entpacken von chromium-browser (49.0.2623.108-0ubuntu1.1233) ...
Vormals nicht ausgewähltes Paket chromium-browser-l10n wird gewählt.
Vorbereitung zum Entpacken von .../chromium-browser-l10n_49.0.2623.108-0ubuntu1.1233_all.deb ...
Entpacken von chromium-browser-l10n (49.0.2623.108-0ubuntu1.1233) ...
Trigger für man-db (2.7.5-1) werden verarbeitet ...
Trigger für bamfdaemon (0.5.3~bzr0+16.04.20160415-0ubuntu1) werden verarbeitet ...
Rebuilding /usr/share/applications/bamf-2.index...
Trigger für gnome-menus (3.13.3-6ubuntu3) werden verarbeitet ...
Trigger für desktop-file-utils (0.22-1ubuntu5) werden verarbeitet ...
Trigger für mime-support (3.59ubuntu1) werden verarbeitet ...
Trigger für hicolor-icon-theme (0.15-0ubuntu1) werden verarbeitet ...
chromium-codecs-ffmpeg-extra (49.0.2623.108-0ubuntu1.1233) wird eingerichtet ...
chromium-browser (49.0.2623.108-0ubuntu1.1233) wird eingerichtet ...
chromium-browser-l10n (49.0.2623.108-0ubuntu1.1233) wird eingerichtet ...