Senaite Patient via Docker

Hello!

A newbie evaluating SENAITE for use in a clinical laboratory environment.

I was able to run SENAITE via Docker, but wanted to install the senaite.patient addon as well but I’m getting a syntax error when I do so. Are there any instructions for running SENAITE with the patient addon in docker?

Here’s the docker-compose file I’m using:

version: "3"

services:
  app:
    image: senaite/senaite:v2.5.0
    ports:
      - 8081:8080
    deploy:
      resources:
        limits:
          cpus: "1"
          memory: 2048MB
    environment:
      ADDONS: "senaite.patient==1.4.0

This works without the “patient” addon, but once I try to add that in I’m seeing this error:

 ✔ Container senaite-app-1  Created                                                                                                                0.0s 
Attaching to app-1
app-1  | Creating directory '/home/senaite/buildout-cache/downloads'.
app-1  | Uninstalling console_scripts.
app-1  | Uninstalling plonesite.
app-1  | Uninstalling zeo.
app-1  | Uninstalling precompiler.
app-1  | Uninstalling unifiedinstaller.
app-1  | Uninstalling zopepy.
app-1  | Uninstalling zopescripts.
app-1  | Uninstalling repozo.
app-1  | Uninstalling zeoserver.
app-1  | Uninstalling instance.
app-1  | Uninstalling _mr.developer.
app-1  | Unused options for buildout: 'deprecation-warnings' 'effective-user'.
app-1  | Installing _mr.developer.
app-1  | Generated script '/home/senaite/senaitelims/bin/develop'.
app-1  | Installing instance.
app-1  | Getting distribution for 'senaite.patient==1.4.0'.
app-1  | WARNING: The easy_install command is deprecated and will be removed in a future version.
app-1  | Got senaite.patient 1.4.0.
app-1  | Generated script '/home/senaite/senaitelims/bin/instance'.
app-1  | Generated interpreter '/home/senaite/senaitelims/parts/instance/bin/interpreter'.
app-1  | Installing zeoserver.
app-1  | Created directory /home/senaite/senaitelims/parts/zeoserver
app-1  | Created directory /home/senaite/senaitelims/parts/zeoserver/etc
app-1  | Created directory /home/senaite/senaitelims/parts/zeoserver/var
app-1  | Created directory /home/senaite/senaitelims/parts/zeoserver/log
app-1  | Created directory /home/senaite/senaitelims/parts/zeoserver/bin
app-1  | Wrote file /home/senaite/senaitelims/parts/zeoserver/etc/zeo.conf
app-1  | Wrote file /home/senaite/senaitelims/parts/zeoserver/bin/zeoctl
app-1  | Changed mode for /home/senaite/senaitelims/parts/zeoserver/bin/zeoctl to 755
app-1  | Wrote file /home/senaite/senaitelims/parts/zeoserver/bin/runzeo
app-1  | Changed mode for /home/senaite/senaitelims/parts/zeoserver/bin/runzeo to 755
app-1  | Generated script '/home/senaite/senaitelims/bin/zeopack'.
app-1  | Generated script '/home/senaite/senaitelims/bin/repozo'.
app-1  | Installing repozo.
app-1  | Generated script '/home/senaite/senaitelims/bin/repozo'.
app-1  | Updating backup.
app-1  | Installing zopescripts.
app-1  | Generated script '/home/senaite/senaitelims/bin/addzope2user'.
app-1  | Generated script '/home/senaite/senaitelims/bin/mkwsgiinstance'.
app-1  | Generated script '/home/senaite/senaitelims/bin/runwsgi'.
app-1  | Generated script '/home/senaite/senaitelims/bin/zconsole'.
app-1  | Installing zopepy.
app-1  | Generated interpreter '/home/senaite/senaitelims/bin/zopepy'.
app-1  | Installing unifiedinstaller.
app-1  | Updating setpermissions.
app-1  | setpermissions: Running # Dummy references to force this to execute after referenced parts
app-1  | echo /data/backups yes > /dev/null
app-1  | chmod 600 .installed.cfg
app-1  | # Make sure anything we've created in var is r/w by our group
app-1  | find /data -type d -exec chmod 770 {} \; 2> /dev/null
app-1  | find /data -type f -exec chmod 660 {} \; 2> /dev/null
app-1  | find /data -type d -exec chmod 770 {} \; 2> /dev/null
app-1  | find /data -type f -exec chmod 660 {} \; 2> /dev/null
app-1  | chmod 754 /home/senaite/senaitelims/bin/*
app-1  | Installing precompiler.
app-1  | Compiling Python files.
app-1  |   File "/home/senaite/senaitelims/eggs/cp27mu/Zope-4.8.10-py2.7.egg/App/tests/fixtures/error.py", line 2
app-1  |     a =  # noqa
app-1  |               ^
app-1  | SyntaxError: invalid syntax
app-1  | 
app-1  |   File "/home/senaite/senaitelims/eggs/cp27mu/attrs-21.4.0-py2.7.egg/attr/_next_gen.py", line 26
app-1  |     *,
app-1  |      ^
app-1  | SyntaxError: invalid syntax
app-1  | 
app-1  |   File "/home/senaite/senaitelims/eggs/cp27mu/zodbpickle-2.6-py2.7-linux-x86_64.egg/zodbpickle/pickle_3.py", line 178
app-1  |     def __init__(self, file, protocol=None, *, fix_imports=True):
app-1  |                                              ^
app-1  | SyntaxError: invalid syntax
app-1  | 
app-1  |   File "/home/senaite/senaitelims/eggs/cp27mu/zodbpickle-2.6-py2.7-linux-x86_64.egg/zodbpickle/pickletools_3.py", line 2049
app-1  |     print("%5d:" % pos, end=' ', file=out)
app-1  |                            ^
app-1  | SyntaxError: invalid syntax
app-1  | 
app-1  |   File "/home/senaite/senaitelims/eggs/cp27mu/zodbpickle-2.6-py2.7-linux-x86_64.egg/zodbpickle/tests/pickletester_3.py", line 147
app-1  |     class use_metaclass(object, metaclass=metaclass):
app-1  |                                          ^
app-1  | SyntaxError: invalid syntax
app-1  | 
app-1  | Compiling locale files.
app-1  | Installing zeo.
app-1  | Created directory /home/senaite/senaitelims/parts/zeo
app-1  | Created directory /home/senaite/senaitelims/parts/zeo/etc
app-1  | Created directory /home/senaite/senaitelims/parts/zeo/var
app-1  | Created directory /home/senaite/senaitelims/parts/zeo/log
app-1  | Created directory /home/senaite/senaitelims/parts/zeo/bin
app-1  | Wrote file /home/senaite/senaitelims/parts/zeo/etc/zeo.conf
app-1  | Wrote file /home/senaite/senaitelims/parts/zeo/bin/zeoctl
app-1  | Changed mode for /home/senaite/senaitelims/parts/zeo/bin/zeoctl to 755
app-1  | Wrote file /home/senaite/senaitelims/parts/zeo/bin/runzeo
app-1  | Changed mode for /home/senaite/senaitelims/parts/zeo/bin/runzeo to 755
app-1  | Generated script '/home/senaite/senaitelims/bin/zeopack'.
app-1  | Generated script '/home/senaite/senaitelims/bin/repozo'.
app-1  | Installing plonesite.
app-1  | Installing console_scripts.
app-1  | Generated script '/home/senaite/senaitelims/bin/reindex'.
app-1  | Generated script '/home/senaite/senaitelims/bin/zope-passwd'.
app-1  | Generated script '/home/senaite/senaitelims/bin/upgrade-sites'.
app-1  | Versions had to be automatically picked.
app-1  | The following part definition lists the versions picked:
app-1  | [versions]
app-1  | Werkzeug = 1.0.1
app-1  | cairocffi = 0.9.0
app-1  | collective.recipe.plonesite = 1.12.0
app-1  | cssselect2 = 0.2.2
app-1  | et-xmlfile = 1.1.0
app-1  | more-itertools = 5.0.0
app-1  | pdfrw = 0.4
app-1  | senaite.core = 2.5.0
app-1  | tinycss2 = 0.6.1
app-1  | 
app-1  | # Required by:
app-1  | # senaite.core==2.5.0
app-1  | Products.DataGridField = 1.9.6
app-1  | 
app-1  | # Required by:
app-1  | # plone.jsonapi.core==0.7.0
app-1  | dicttoxml = 1.7.16
app-1  | 
app-1  | # Required by:
app-1  | # openpyxl==2.6.4
app-1  | jdcal = 1.4.1
app-1  | 
app-1  | # Required by:
app-1  | # senaite.core==2.5.0
app-1  | magnitude = 1.0.1
app-1  | 
app-1  | # Required by:
app-1  | # senaite.core==2.5.0
app-1  | plone.app.jquerytools = 1.9.5
app-1  | 
app-1  | # Required by:
app-1  | # senaite.core==2.5.0
app-1  | plone.jsonapi.core = 0.7.0
app-1 exited with code 137

Any thoughts? Is there a existing image with the patient addon I can use for demo purposes?

Thanks!
Mark

Hi @mgoodrich,

if you are referring to the SyntaxError: invalid syntax errors, you can ingnore them.
Most time this happens for the restricted Script (Python) files that reside in the codebase or in your case, because of a Python 3 syntax, we are not (yet) compatible with.

However, it seems like there is another issue, what makes the container to exit with code 137.

I noticed that your docker compose file includes two times the same services. Was this a copy/paste issue?

Besides that, I could imagine that we have a side-effect here that fetches an incompatible version in this setup.

Can you try the following docker compose file with the latest 2.x version:

services:

  app:
    container_name: senaite
    image: senaite/senaite:2.x
    restart: "unless-stopped"
    ports:
      - "8081:8080"
    deploy:
      resources:
        limits:
          memory: 8GB
    environment:
      ADDONS: "senaite.patient"
      SOURCES: "senaite.patient=git https://github.com/senaite/senaite.patient.git branch=master"

Hope that helps

@ramonski thanks for the prompt reply, it was very helpful.

The docker compose file you shared still didn’t work, but you got me past fixating on the red herring syntax errors. After talking with a couple colleagues, we think the problem may be some security software our IT department installed on our machines. We are continuing to look into this, I’ll keep you posted on whether I get this work.

Thanks again… and, yeah, the duplicate dockerfile was just a copy-and-paste error on my part I missed.

Take care,
Mark

@ramonski confirmed that it was security software running on my machine that was killing the container for some reason. Hope to actually play around with Senaite next week, thanks for the help!

Mark

1 Like