Docker-compose.yml: 'docker-compose up -d' with error output

Gramps 5.2.2
LMDE 6
I started a local apache2 server, added docker-compose.yml from this page and run

docker-compose up -d

This output shows an error at the end. How solve it?

docker-compose up -d
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 704, in urlopen
    httplib_response = self._make_request(
                       ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 399, in _make_request
    conn.request(method, url, **httplib_request_kw)
  File "/usr/lib/python3.11/http/client.py", line 1282, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/usr/lib/python3.11/http/client.py", line 1328, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
  File "/usr/lib/python3.11/http/client.py", line 1277, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  File "/usr/lib/python3.11/http/client.py", line 1037, in _send_output
    self.send(msg)
  File "/usr/lib/python3.11/http/client.py", line 975, in send
    self.connect()
  File "/usr/lib/python3/dist-packages/docker/transport/unixconn.py", line 30, in connect
    sock.connect(self.unix_socket)
PermissionError: [Errno 13] Permission denied

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/requests/adapters.py", line 489, in send
    resp = conn.urlopen(
           ^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 788, in urlopen
    retries = retries.increment(
              ^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 550, in increment
    raise six.reraise(type(error), error, _stacktrace)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/six.py", line 718, in reraise
    raise value.with_traceback(tb)
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 704, in urlopen
    httplib_response = self._make_request(
                       ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 399, in _make_request
    conn.request(method, url, **httplib_request_kw)
  File "/usr/lib/python3.11/http/client.py", line 1282, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/usr/lib/python3.11/http/client.py", line 1328, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
  File "/usr/lib/python3.11/http/client.py", line 1277, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  File "/usr/lib/python3.11/http/client.py", line 1037, in _send_output
    self.send(msg)
  File "/usr/lib/python3.11/http/client.py", line 975, in send
    self.connect()
  File "/usr/lib/python3/dist-packages/docker/transport/unixconn.py", line 30, in connect
    sock.connect(self.unix_socket)
urllib3.exceptions.ProtocolError: ('Connection aborted.', PermissionError(13, 'Permission denied'))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/docker/api/client.py", line 214, in _retrieve_server_version
    return self.version(api_version=False)["ApiVersion"]
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/docker/api/daemon.py", line 181, in version
    return self._result(self._get(url), json=True)
                        ^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/docker/utils/decorators.py", line 46, in inner
    return f(self, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/docker/api/client.py", line 237, in _get
    return self.get(url, **self._set_request_timeout(kwargs))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 600, in get
    return self.request("GET", url, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 587, in request
    resp = self.send(prep, **send_kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 701, in send
    r = adapter.send(request, **kwargs)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/requests/adapters.py", line 547, in send
    raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', PermissionError(13, 'Permission denied'))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/bin/docker-compose", line 33, in <module>
    sys.exit(load_entry_point('docker-compose==1.29.2', 'console_scripts', 'docker-compose')())
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/compose/cli/main.py", line 81, in main
    command_func()
  File "/usr/lib/python3/dist-packages/compose/cli/main.py", line 200, in perform_command
    project = project_from_options('.', options)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/compose/cli/command.py", line 60, in project_from_options
    return get_project(
           ^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/compose/cli/command.py", line 152, in get_project
    client = get_client(
             ^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/compose/cli/docker_client.py", line 41, in get_client
    client = docker_client(
             ^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/compose/cli/docker_client.py", line 170, in docker_client
    client = APIClient(use_ssh_client=not use_paramiko_ssh, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/docker/api/client.py", line 197, in __init__
    self._version = self._retrieve_server_version()
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/docker/api/client.py", line 221, in _retrieve_server_version
    raise DockerException(
docker.errors.DockerException: Error while fetching server API version: ('Connection aborted.', PermissionError(13, 'Permission denied'))

I had a long installation marathon this afternoon. I also installed docker-desktop. I don’t even know if it was necessary.
However, I was able to run the command “docker-compose up -d” with ‘sudo’ in front of it. There was quite a lot of download, over 1 GB, which surprised me. Unfortunately, I got another error message at the end:

sudo docker-compose up -d
[sudo] Passwort für rainer:     
grampsweb_redis is up-to-date
Starting rainer_grampsweb_1 ... 
grampsweb_celery is up-to-date
Starting rainer_grampsweb_1 ... error

ERROR: for rainer_grampsweb_1  Cannot start service grampsweb: driver failed programming external connectivity on endpoint rainer_grampsweb_1 (fcac31ab4c4fe56e6df0002405c7feff177f97a0568ed50cfadc0cab9a4edde0): Error starting userland proxy: listen tcp4 0.0.0.0:80: bind: address already in use

ERROR: for grampsweb  Cannot start service grampsweb: driver failed programming external connectivity on endpoint rainer_grampsweb_1 (fcac31ab4c4fe56e6df0002405c7feff177f97a0568ed50cfadc0cab9a4edde0): Error starting userland proxy: listen tcp4 0.0.0.0:80: bind: address already in use
ERROR: Encountered errors while bringing up the project.

Does anyone have a solution to this?

docker-compose up -d now says all is OK.
docker-compose up gives a few warnings:

/usr/local/lib/python3.11/dist-packages/gramps/plugins/tool/check.py:51: PyGIWarning: Gtk was imported without specifying a version first. Use gi.require_version('Gtk', '3.0') before import to ensure that the right version gets loaded.
grampsweb_celery    |   from gi.repository import Gtk

I don’t know how to handle it. Is it broken? Can it be fixed? How?

I still didn’t get the first-run wizard that allows me to register a new account.
Is there a way to get there?

EDIT:
In this situation I need basic clarity:

  1. do I need docker desktop in addition to docker-compose?
  2. do I need to have apache2 installed and started?

This means that a process is trying to listen to port 80 on your own PC, and there is another process (or thread) that listens to that port already. And in most cases, only one process (or thread) can bind to a port as a listener.

Port 80 is the standard port for HTTP, and the error can be caused by an earlier try to start a web service, that partly failed, meaning that it didn’t fail enough to disconnect from that port. And in that case, a reboot can help.

You can use the netstat command to see what ports are in use, and there maybe versions of that with a GUI.

Hi @Dan-cer, some comments:

There was quite a lot of download, over 1 GB, which surprised me.

That’s not unusual when using docker. Docker images are composed of “layers”, the lowest one being the OS base image. The first time you run a container based on an image, docker will download the layers that are not present locally.

do I need docker desktop in addition to docker-compose?

Docker desktop is only for Windows and Mac, not needed on Linux.

do I need to have apache2 installed and started

Nope.

Thank you, @DavidMStraub and @ennoborg ! Then it remains to be clarified why the first-run-wizard does not start. Above I have already posted the corresponding error message that the gtk version was not specified:

/usr/local/lib/python3.11/dist-packages/gramps/plugins/tool/check.py:51: PyGIWarning: Gtk was imported without specifying a version first. Use gi.require_version('Gtk', '3.0') before import to ensure that the right version gets loaded.
grampsweb_celery    |   from gi.repository import Gtk

My guess is that this is why no login window can be built.
I have no experience using python commands. It seems that they are quite simple to execute, and I tried some for import without success.

Edit: I also wrote an issue at Github/Gramps about this topic 3 days ago.

No, this warning is irrelevant.

Ok. And how can I start the first-run wizard now? It didn’t open automatically because of issues. But now?

Edit:
Running docker-compose logs --tail 100 grampsweb gives following output with “fail” notice at the end:

rainer@Optiplex:/var/www/html$ docker-compose logs --tail 100 grampsweb
Attaching to e0885c687992_html_grampsweb_1
e0885c687992_html_grampsweb_1 | 
e0885c687992_html_grampsweb_1 | (gunicorn:23): Gtk-CRITICAL **: 17:44:42.852: gtk_icon_theme_get_for_screen: assertion 'GDK_IS_SCREEN (screen)' failed
e0885c687992_html_grampsweb_1 | /usr/local/lib/python3.11/dist-packages/gramps/plugins/tool/check.py:51: PyGIWarning: Gtk was imported without specifying a version first. Use gi.require_version('Gtk', '3.0') before import to ensure that the right version gets loaded.
e0885c687992_html_grampsweb_1 |   from gi.repository import Gtk
e0885c687992_html_grampsweb_1 | 
e0885c687992_html_grampsweb_1 | (__main__.py:9): Gtk-CRITICAL **: 18:39:07.720: gtk_icon_theme_get_for_screen: assertion 'GDK_IS_SCREEN (screen)' failed
e0885c687992_html_grampsweb_1 | INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
e0885c687992_html_grampsweb_1 | INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
e0885c687992_html_grampsweb_1 | [2024-05-09 18:39:09 +0000] [13] [INFO] Starting gunicorn 22.0.0
e0885c687992_html_grampsweb_1 | [2024-05-09 18:39:09 +0000] [13] [INFO] Listening at: http://0.0.0.0:5000 (13)
e0885c687992_html_grampsweb_1 | [2024-05-09 18:39:09 +0000] [13] [INFO] Using worker: sync
e0885c687992_html_grampsweb_1 | [2024-05-09 18:39:09 +0000] [14] [INFO] Booting worker with pid: 14
e0885c687992_html_grampsweb_1 | [2024-05-09 18:39:09 +0000] [15] [INFO] Booting worker with pid: 15
e0885c687992_html_grampsweb_1 | [2024-05-09 18:39:09 +0000] [16] [INFO] Booting worker with pid: 16
e0885c687992_html_grampsweb_1 | [2024-05-09 18:39:09 +0000] [18] [INFO] Booting worker with pid: 18
e0885c687992_html_grampsweb_1 | [2024-05-09 18:39:09 +0000] [19] [INFO] Booting worker with pid: 19
e0885c687992_html_grampsweb_1 | [2024-05-09 18:39:09 +0000] [20] [INFO] Booting worker with pid: 20
e0885c687992_html_grampsweb_1 | [2024-05-09 18:39:09 +0000] [22] [INFO] Booting worker with pid: 22
e0885c687992_html_grampsweb_1 | [2024-05-09 18:39:09 +0000] [24] [INFO] Booting worker with pid: 24
e0885c687992_html_grampsweb_1 | /usr/local/lib/python3.11/dist-packages/gramps/plugins/tool/check.py:51: PyGIWarning: Gtk was imported without specifying a version first. Use gi.require_version('Gtk', '3.0') before import to ensure that the right version gets loaded.
e0885c687992_html_grampsweb_1 |   from gi.repository import Gtk
e0885c687992_html_grampsweb_1 | 
e0885c687992_html_grampsweb_1 | (gunicorn:15): Gtk-CRITICAL **: 18:39:11.480: gtk_icon_theme_get_for_screen: assertion 'GDK_IS_SCREEN (screen)' failed
e0885c687992_html_grampsweb_1 | /usr/local/lib/python3.11/dist-packages/gramps/plugins/tool/check.py:51: PyGIWarning: Gtk was imported without specifying a version first. Use gi.require_version('Gtk', '3.0') before import to ensure that the right version gets loaded.
e0885c687992_html_grampsweb_1 |   from gi.repository import Gtk
e0885c687992_html_grampsweb_1 | 
e0885c687992_html_grampsweb_1 | (gunicorn:22): Gtk-CRITICAL **: 18:39:11.526: gtk_icon_theme_get_for_screen: assertion 'GDK_IS_SCREEN (screen)' failed
e0885c687992_html_grampsweb_1 | /usr/local/lib/python3.11/dist-packages/gramps/plugins/tool/check.py:51: PyGIWarning: Gtk was imported without specifying a version first. Use gi.require_version('Gtk', '3.0') before import to ensure that the right version gets loaded.
e0885c687992_html_grampsweb_1 |   from gi.repository import Gtk
e0885c687992_html_grampsweb_1 | /usr/local/lib/python3.11/dist-packages/gramps/plugins/tool/check.py:51: PyGIWarning: Gtk was imported without specifying a version first. Use gi.require_version('Gtk', '3.0') before import to ensure that the right version gets loaded.
e0885c687992_html_grampsweb_1 |   from gi.repository import Gtk
e0885c687992_html_grampsweb_1 | 
e0885c687992_html_grampsweb_1 | (gunicorn:14): Gtk-CRITICAL **: 18:39:11.703: gtk_icon_theme_get_for_screen: assertion 'GDK_IS_SCREEN (screen)' failed
e0885c687992_html_grampsweb_1 | 
e0885c687992_html_grampsweb_1 | (gunicorn:18): Gtk-CRITICAL **: 18:39:11.722: gtk_icon_theme_get_for_screen: assertion 'GDK_IS_SCREEN (screen)' failed
e0885c687992_html_grampsweb_1 | /usr/local/lib/python3.11/dist-packages/gramps/plugins/tool/check.py:51: PyGIWarning: Gtk was imported without specifying a version first. Use gi.require_version('Gtk', '3.0') before import to ensure that the right version gets loaded.
e0885c687992_html_grampsweb_1 |   from gi.repository import Gtk
e0885c687992_html_grampsweb_1 | 
e0885c687992_html_grampsweb_1 | (gunicorn:16): Gtk-CRITICAL **: 18:39:11.952: gtk_icon_theme_get_for_screen: assertion 'GDK_IS_SCREEN (screen)' failed
e0885c687992_html_grampsweb_1 | /usr/local/lib/python3.11/dist-packages/gramps/plugins/tool/check.py:51: PyGIWarning: Gtk was imported without specifying a version first. Use gi.require_version('Gtk', '3.0') before import to ensure that the right version gets loaded.
e0885c687992_html_grampsweb_1 |   from gi.repository import Gtk
e0885c687992_html_grampsweb_1 | 
e0885c687992_html_grampsweb_1 | (gunicorn:19): Gtk-CRITICAL **: 18:39:12.004: gtk_icon_theme_get_for_screen: assertion 'GDK_IS_SCREEN (screen)' failed
e0885c687992_html_grampsweb_1 | /usr/local/lib/python3.11/dist-packages/gramps/plugins/tool/check.py:51: PyGIWarning: Gtk was imported without specifying a version first. Use gi.require_version('Gtk', '3.0') before import to ensure that the right version gets loaded.
e0885c687992_html_grampsweb_1 |   from gi.repository import Gtk
e0885c687992_html_grampsweb_1 | 
e0885c687992_html_grampsweb_1 | (gunicorn:20): Gtk-CRITICAL **: 18:39:12.265: gtk_icon_theme_get_for_screen: assertion 'GDK_IS_SCREEN (screen)' failed
e0885c687992_html_grampsweb_1 | /usr/local/lib/python3.11/dist-packages/gramps/plugins/tool/check.py:51: PyGIWarning: Gtk was imported without specifying a version first. Use gi.require_version('Gtk', '3.0') before import to ensure that the right version gets loaded.
e0885c687992_html_grampsweb_1 |   from gi.repository import Gtk
e0885c687992_html_grampsweb_1 | 
e0885c687992_html_grampsweb_1 | (gunicorn:24): Gtk-CRITICAL **: 18:39:12.335: gtk_icon_theme_get_for_screen: assertion 'GDK_IS_SCREEN (screen)' failed
e0885c687992_html_grampsweb_1 | /usr/local/lib/python3.11/dist-packages/gramps/plugins/tool/check.py:51: PyGIWarning: Gtk was imported without specifying a version first. Use gi.require_version('Gtk', '3.0') before import to ensure that the right version gets loaded.
e0885c687992_html_grampsweb_1 |   from gi.repository import Gtk
e0885c687992_html_grampsweb_1 | 
e0885c687992_html_grampsweb_1 | (__main__.py:9): Gtk-CRITICAL **: 06:00:06.991: gtk_icon_theme_get_for_screen: assertion 'GDK_IS_SCREEN (screen)' failed
e0885c687992_html_grampsweb_1 | INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
e0885c687992_html_grampsweb_1 | INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
e0885c687992_html_grampsweb_1 | [2024-05-10 06:00:08 +0000] [13] [INFO] Starting gunicorn 22.0.0
e0885c687992_html_grampsweb_1 | [2024-05-10 06:00:08 +0000] [13] [INFO] Listening at: http://0.0.0.0:5000 (13)
e0885c687992_html_grampsweb_1 | [2024-05-10 06:00:08 +0000] [13] [INFO] Using worker: sync
e0885c687992_html_grampsweb_1 | [2024-05-10 06:00:08 +0000] [14] [INFO] Booting worker with pid: 14
e0885c687992_html_grampsweb_1 | [2024-05-10 06:00:08 +0000] [15] [INFO] Booting worker with pid: 15
e0885c687992_html_grampsweb_1 | [2024-05-10 06:00:08 +0000] [16] [INFO] Booting worker with pid: 16
e0885c687992_html_grampsweb_1 | [2024-05-10 06:00:08 +0000] [17] [INFO] Booting worker with pid: 17
e0885c687992_html_grampsweb_1 | [2024-05-10 06:00:08 +0000] [20] [INFO] Booting worker with pid: 20
e0885c687992_html_grampsweb_1 | [2024-05-10 06:00:08 +0000] [22] [INFO] Booting worker with pid: 22
e0885c687992_html_grampsweb_1 | [2024-05-10 06:00:08 +0000] [24] [INFO] Booting worker with pid: 24
e0885c687992_html_grampsweb_1 | [2024-05-10 06:00:08 +0000] [25] [INFO] Booting worker with pid: 25
e0885c687992_html_grampsweb_1 | /usr/local/lib/python3.11/dist-packages/gramps/plugins/tool/check.py:51: PyGIWarning: Gtk was imported without specifying a version first. Use gi.require_version('Gtk', '3.0') before import to ensure that the right version gets loaded.
e0885c687992_html_grampsweb_1 |   from gi.repository import Gtk
e0885c687992_html_grampsweb_1 | 
e0885c687992_html_grampsweb_1 | (gunicorn:20): Gtk-CRITICAL **: 06:00:11.832: gtk_icon_theme_get_for_screen: assertion 'GDK_IS_SCREEN (screen)' failed
e0885c687992_html_grampsweb_1 | /usr/local/lib/python3.11/dist-packages/gramps/plugins/tool/check.py:51: PyGIWarning: Gtk was imported without specifying a version first. Use gi.require_version('Gtk', '3.0') before import to ensure that the right version gets loaded.
e0885c687992_html_grampsweb_1 |   from gi.repository import Gtk
e0885c687992_html_grampsweb_1 | 
e0885c687992_html_grampsweb_1 | (gunicorn:25): Gtk-CRITICAL **: 06:00:12.223: gtk_icon_theme_get_for_screen: assertion 'GDK_IS_SCREEN (screen)' failed
e0885c687992_html_grampsweb_1 | /usr/local/lib/python3.11/dist-packages/gramps/plugins/tool/check.py:51: PyGIWarning: Gtk was imported without specifying a version first. Use gi.require_version('Gtk', '3.0') before import to ensure that the right version gets loaded.
e0885c687992_html_grampsweb_1 |   from gi.repository import Gtk
e0885c687992_html_grampsweb_1 | 
e0885c687992_html_grampsweb_1 | (gunicorn:22): Gtk-CRITICAL **: 06:00:12.360: gtk_icon_theme_get_for_screen: assertion 'GDK_IS_SCREEN (screen)' failed
e0885c687992_html_grampsweb_1 | /usr/local/lib/python3.11/dist-packages/gramps/plugins/tool/check.py:51: PyGIWarning: Gtk was imported without specifying a version first. Use gi.require_version('Gtk', '3.0') before import to ensure that the right version gets loaded.
e0885c687992_html_grampsweb_1 |   from gi.repository import Gtk
e0885c687992_html_grampsweb_1 | /usr/local/lib/python3.11/dist-packages/gramps/plugins/tool/check.py:51: PyGIWarning: Gtk was imported without specifying a version first. Use gi.require_version('Gtk', '3.0') before import to ensure that the right version gets loaded.
e0885c687992_html_grampsweb_1 |   from gi.repository import Gtk
e0885c687992_html_grampsweb_1 | 
e0885c687992_html_grampsweb_1 | (gunicorn:15): Gtk-CRITICAL **: 06:00:12.715: gtk_icon_theme_get_for_screen: assertion 'GDK_IS_SCREEN (screen)' failed
e0885c687992_html_grampsweb_1 | 
e0885c687992_html_grampsweb_1 | (gunicorn:14): Gtk-CRITICAL **: 06:00:12.724: gtk_icon_theme_get_for_screen: assertion 'GDK_IS_SCREEN (screen)' failed
e0885c687992_html_grampsweb_1 | /usr/local/lib/python3.11/dist-packages/gramps/plugins/tool/check.py:51: PyGIWarning: Gtk was imported without specifying a version first. Use gi.require_version('Gtk', '3.0') before import to ensure that the right version gets loaded.
e0885c687992_html_grampsweb_1 |   from gi.repository import Gtk
e0885c687992_html_grampsweb_1 | 
e0885c687992_html_grampsweb_1 | (gunicorn:17): Gtk-CRITICAL **: 06:00:12.969: gtk_icon_theme_get_for_screen: assertion 'GDK_IS_SCREEN (screen)' failed
e0885c687992_html_grampsweb_1 | /usr/local/lib/python3.11/dist-packages/gramps/plugins/tool/check.py:51: PyGIWarning: Gtk was imported without specifying a version first. Use gi.require_version('Gtk', '3.0') before import to ensure that the right version gets loaded.
e0885c687992_html_grampsweb_1 |   from gi.repository import Gtk
e0885c687992_html_grampsweb_1 | 
e0885c687992_html_grampsweb_1 | (gunicorn:16): Gtk-CRITICAL **: 06:00:12.990: gtk_icon_theme_get_for_screen: assertion 'GDK_IS_SCREEN (screen)' failed
e0885c687992_html_grampsweb_1 | /usr/local/lib/python3.11/dist-packages/gramps/plugins/tool/check.py:51: PyGIWarning: Gtk was imported without specifying a version first. Use gi.require_version('Gtk', '3.0') before import to ensure that the right version gets loaded.
e0885c687992_html_grampsweb_1 |   from gi.repository import Gtk
e0885c687992_html_grampsweb_1 | 
e0885c687992_html_grampsweb_1 | (gunicorn:24): Gtk-CRITICAL **: 06:00:13.170: gtk_icon_theme_get_for_screen: assertion 'GDK_IS_SCREEN (screen)' failed

The answer is that somehow, the process has no access to the screen.

Your first-run assistant should show up at localhost:80. If it doesn’t, your docker-compose setup is incorrect. If you want us to help you debug, you need to provide much more detail about your setup.

Gladly.
localhost:80 or localhost:8080 doesn’t start first-run wizard. Instead, “Apache2 Debian Default Page” opens (see screenshot).

What else is needed? Below is the docker-compose.yml. Line 6 is edited to

- "8080:5000"  # host:docker

to run it.
With “80:5000” I get

Error response from daemon: driver failed programming external connectivity on endpoint html-grampsweb-1 (978bedb7f1a5b4b7db54962f8855a716fd153d0274c7de781719cda7dc5a7ccc): Error starting userland proxy: listen tcp4 0.0.0.0:80: bind: address already in use

docker-compose.yml:

services:
  grampsweb: &grampsweb
    image: ghcr.io/gramps-project/grampsweb:latest
    restart: always
    ports:
      - "8080:5000"  # host:docker
    environment:
      GRAMPSWEB_TREE: "Gramps Web"  # will create a new tree if not exists
      GRAMPSWEB_CELERY_CONFIG__broker_url: "redis://grampsweb_redis:6379/0"
      GRAMPSWEB_CELERY_CONFIG__result_backend: "redis://grampsweb_redis:6379/0"
      GRAMPSWEB_RATELIMIT_STORAGE_URI: redis://grampsweb_redis:6379/1
    depends_on:
      - grampsweb_redis
    volumes:
      - gramps_users:/app/users  # persist user database
      - gramps_index:/app/indexdir  # persist search index
      - gramps_thumb_cache:/app/thumbnail_cache  # persist thumbnails
      - gramps_cache:/app/cache  # persist export and report caches
      - gramps_secret:/app/secret  # persist flask secret
      - gramps_db:/root/.gramps/grampsdb  # persist Gramps database
      - gramps_media:/app/media  # persist media files
      - gramps_tmp:/tmp

  grampsweb_celery:
    <<: *grampsweb  # YAML merge key copying the entire grampsweb service config
    ports: []
    container_name: grampsweb_celery
    depends_on:
      - grampsweb_redis
    command: celery -A gramps_webapi.celery worker --loglevel=INFO

  grampsweb_redis:
    image: redis:7.2.4-alpine
    container_name: grampsweb_redis
    restart: always

volumes:
  gramps_users:
  gramps_index:
  gramps_thumb_cache:
  gramps_cache:
  gramps_secret:
  gramps_db:
  gramps_media:
  gramps_tmp:

I installed docker-compose-lamp today.

Is there anything else you have to know or look at?

The Gramps Web images don’t run Apache. So if you see an Apache start page, you are running some other webserver.

Try choosing an unused port (8080 might be used as well) and opening that in the browser.

I have no idea which port number to use, which numbers are available and good for localhost.
Could you please give some examples?
Have I to delete Apache then?

Update:
Finally I could manage to get first-run wizard.
SOLVED.

Update:
I started Synchronization with checking “Reset remote to local” and got an error when sync media.
A report is sent.
Update2:
I uploaded media files (compressed) successfully.
Synchronization works.

Addendum:
When I started the synchronization with the notebook (this was my main goal for setting up Grampsweb), unfortunately the most recent entries at server level on the server computer were deleted first, although I had selected “Reset local to remote”.

But I had a similar problem before with a browser synchronization. It seems that the initial synchronization can easily go wrong. But after repairing it, it has been fine ever since.