question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

Official docker image need more modules

See original GitHub issue

I have been following issue 341 and is really excited to be able to use it, however I think it needs some of the prerequisites added to the Dockerfile.

For example the following log entries work on my standalone install:

mqttwarn        | 2018-10-30 11:19:16,856 DEBUG [slack] *** MODULE=services/slack.py: service=slack, target=openhabalarm
mqttwarn        | 2018-10-30 11:19:16,857 ERROR [slack] slacker module missing
mqttwarn        | 2018-10-30 11:19:16,858 WARNING [mqttwarn] Notification of slack for '/openhab/notification/alarm' FAILED or TIMED OUT
mqttwarn        | 2018-10-30 11:19:16,859 DEBUG [mqttwarn] Job queue has 5 items to process
mqttwarn        | 2018-10-30 11:19:16,859 DEBUG [mqttwarn] Processor #0 is handling: 'pushbullet' for david
mqttwarn        | 2018-10-30 11:19:16,864 DEBUG [pushbullet] *** MODULE=services/pushbullet.py: service=pushbullet, target=david
mqttwarn        | 2018-10-30 11:19:16,865 WARNING [pushbullet] pushbullet is not installed
mqttwarn        | 2018-10-30 11:19:16,866 WARNING [mqttwarn] Notification of pushbullet for '/openhab/notification/alarm' FAILED or TIMED OUT

On the normal install I am able to install the dependencies, but the docker image mean I need to build my own for my specific needs unless you could add some of the popular ones at least.

Many thanks in advance!

Issue Analytics

  • State:closed
  • Created 5 years ago
  • Reactions:2
  • Comments:18 (9 by maintainers)

github_iconTop GitHub Comments

3reactions
rgitzelcommented, Oct 30, 2018

I did an experiment to create a Docker image which includes as many dependencies as I could find reading through the README: https://github.com/rgitzel/mqttwarn/blob/docker-dependencies/Dockerfile#L5

With all those dependencies added, the Docker image is 420Mb

With very few dependencies, the “official” image built yesterday is 356Mb

So basically installing all the extra libraries results in no appreciable difference in size.

Then I modified it to use Alpine as the base OS, which reduced the image to 117Mb

That’s indeed smaller, but frankly I don’t think it’s worth the work sorting out all the picky library bits that are missing from Alpine (indeed, the Azure library would be painful). 420Mb isn’t anything out of the ordinary, particularly for a server application.

CAVEAT: I haven’t tested either of these images beyond running them on the command-line:

$ docker run -t rgitzel/mqttwarn-full
Cannot open configuration at /opt/mqttwarn/conf/mqttwarn.ini: [Errno 2] No such file or directory: '/opt/mqttwarn/conf/mqttwarn.ini'

Because Python is interpreted, the app probably won’t fail for a given plugin until it’s run. But at least those many dependencies installed without any apparent conflict.

@tinuva could you give one or both of the new images a try? rgitzel/mqttwarn-full-alpine and rgitzel/mqttwarn-full. They hopefully have everything installed that you need.

And if anyone notices any dependency I missed (other than the Mac-dependent ones), let me know and I’ll add them.

1reaction
egadgetjnrcommented, Oct 30, 2018

Hey Guys, Just my 2 cents on this one being somewhat an experienced docker user.

I think going down the path of having ALL the modules installed on an image would be somewhat troublesome as it would increase the image size exponentially.

Also, Using a tag to define the modules would also be difficult if there is more than one module requirement. How would you be able to use Pushbullet and MySQL and hipchat all in the one image?

@amotl is on the money though with having a command that you can run to install them, as you’d be able to use your own dockerfile to specify the modules you want if need be. Failing that, could you use arguments to install the plugins on first run? That way when you use ‘docker run’ you will be able to pass arguments for the module installation at the end of the command. Both of these approaches are what other developers use for their docker repos and it allows full customisation of different scenarios.

Read more comments on GitHub >

github_iconTop Results From Across the Web

Docker Official Images
The Docker Official Images are a curated set of Docker repositories hosted on Docker Hub. They are designed to: Provide essential base OS...
Read more >
What do I need to change in NGINX official Docker's image to ...
3 --network host -t so:57739560 . Run the container: docker run --rm -it -p 80:80 so:57739560. For another example of building dynamic modules...
Read more >
Container Modules - Garden
container modules can be used to just build container images, or they can specify deployable services through the optional services key, as well...
Read more >
Docker Open Source Engine Guide | Creating Custom Images
For creating your custom image you need a base Docker image of SLES. ... For more information about docker build options, see the...
Read more >
Running Airflow in Docker
When you want to run Airflow locally, you might want to use an extended image, containing some additional dependencies - for example you...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found