skonik / docker-compose-diagram

🐳docker-compose + 🎨diagrams = docker-compose-diagram 🐳🎨
https://skonik.github.io/docker-compose-diagram
MIT License
74 stars 7 forks source link

Does this tool works with images that are not public? #14

Open eschizoid opened 5 months ago

eschizoid commented 5 months ago

Thanks for this amazing package!

Wondering if compose-diagram works for images that are hosted on private docker registries such artifactory?

❯❯❯ compose-diagram --file docker-compose.yaml --direction=TB --nodesep=1.2
File docker-compose.yaml has been found. Reading! 📗
Service: cassandra
   Service: {}
Service: localstack
   Service: {}
Service: redis
   Service: {}
Service: wiremock
   Service: {}

Traceback (most recent call last):
  File "/Users/gpy428/.local/bin/compose-diagram", line 8, in <module>
    sys.exit(process_cli())
             ^^^^^^^^^^^^^
  File "/Users/gpy428/.local/pipx/venvs/docker-compose-diagram/lib/python3.12/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/gpy428/.local/pipx/venvs/docker-compose-diagram/lib/python3.12/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
         ^^^^^^^^^^^^^^^^
  File "/Users/gpy428/.local/pipx/venvs/docker-compose-diagram/lib/python3.12/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/gpy428/.local/pipx/venvs/docker-compose-diagram/lib/python3.12/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/gpy428/.local/pipx/venvs/docker-compose-diagram/lib/python3.12/site-packages/docker_compose_diagram/cli.py", line 51, in process_cli
    run(file, direction, nodesep, out_format)
  File "/Users/gpy428/.local/pipx/venvs/docker-compose-diagram/lib/python3.12/site-packages/docker_compose_diagram/cli.py", line 28, in run
    app.draw(
  File "/Users/gpy428/.local/pipx/venvs/docker-compose-diagram/lib/python3.12/site-packages/docker_compose_diagram/facade.py", line 20, in draw
    self.renderer.render(
  File "/Users/gpy428/.local/pipx/venvs/docker-compose-diagram/lib/python3.12/site-packages/docker_compose_diagram/renderer/diagrams.py", line 32, in
render
    plugin.execute(services, self.DRAWN_NODES)
  File "/Users/gpy428/.local/pipx/venvs/docker-compose-diagram/lib/python3.12/site-packages/docker_compose_diagram/renderer/plugins/diagrams.py", line
47, in execute
    node_instance = draw_service(service=service)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/gpy428/.local/pipx/venvs/docker-compose-diagram/lib/python3.12/site-packages/docker_compose_diagram/renderer/plugins/diagrams.py", line
20, in draw_service
    diagram_node_image_class = determine_diagram_render_class(
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/gpy428/.local/pipx/venvs/docker-compose-diagram/lib/python3.12/site-packages/docker_compose_diagram/docker_images/utils.py", line 70, in
determine_diagram_render_class
    return _import_node_class_from_path(image_name)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/gpy428/.local/pipx/venvs/docker-compose-diagram/lib/python3.12/site-packages/docker_compose_diagram/docker_images/utils.py", line 55, in
_import_node_class_from_path
    module = importlib.import_module(package_path)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/Cellar/python@3.12/3.12.3/Frameworks/Python.framework/Versions/3.12/lib/python3.12/importlib/__init__.py", line 90, in
import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1310, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1310, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1324, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'artifactory-dockerhub'
⠼ Working..%
skonik commented 5 months ago

Hello.

It seems to be a bug. It shouldn't throw errors in this case.

You can try to do the following. Add labels to your services inside docker-compose file:

  SomeService:
    ....
    labels:
      "docker_compose_diagram.icon": "diagrams.onprem.compute.Server"

Inside "docker_compose_diagram.icon" you can put any node path from here: https://diagrams.mingrammer.com/docs/nodes/programming

For example to render react icon you can specify diagrams.programming.framework.React:

    labels:
      "docker_compose_diagram.icon": "diagrams.programming.framework.React"

Add labels to your services to manage how it will be rendered