ThePorgs / Exegol

Fully featured and community-driven hacking environment
https://exegol.readthedocs.io/
GNU General Public License v3.0
1.95k stars 191 forks source link

[ERROR] The xhost command is not available on your host and can't access containers from previous install #194

Closed MathisLec closed 11 months ago

MathisLec commented 11 months ago

Describe the bug

I have a fresh arch install using wayland as x server. After installing exegol correctly, I tried to get into a container from my previous install. Then, this error happened:

[-] The xhost command is not available on your host. Exegol was unable to allow your   
container to access your graphical environment (or you don't have one).                
[-] It seems that something unexpected happened ...                                    
[-] To draw our attention to the problem and allow us to fix it, you can share your    
error with us (by copying and pasting it with this syntax: ``` <error> ```) by creating
a GitHub issue at this address: https://github.com/ThePorgs/Exegol/issues              
[+] Thank you for your collaboration!                                                  
╭───────────────────────── Traceback (most recent call last) ─────────────────────────╮
│ /home/<user>/.venv/lib/python3.11/site-packages/docker/api/client.py:268 in          │
│ _raise_for_status                                                                   │
│                                                                                     │
│   265 │   def _raise_for_status(self, response):                                    │
│   266 │   │   """Raises stored :class:`APIError`, if one occurred."""               │
│   267 │   │   try:                                                                  │
│ ❱ 268 │   │   │   response.raise_for_status()                                       │
│   269 │   │   except requests.exceptions.HTTPError as e:                            │
│   270 │   │   │   raise create_api_error_from_http_exception(e) from e              │
│   271                                                                               │
│                                                                                     │
│ ╭───────────────────────────── locals ──────────────────────────────╮               │
│ │ response = <Response [400]>                                       │               │
│ │     self = <docker.api.client.APIClient object at 0x7f43b6f19e10> │               │
│ ╰───────────────────────────────────────────────────────────────────╯               │
│                                                                                     │
│ /home/<user>/.venv/lib/python3.11/site-packages/requests/models.py:1021 in           │
│ raise_for_status                                                                    │
│                                                                                     │
│   1018 │   │   │   )                                                                │
│   1019 │   │                                                                        │
│   1020 │   │   if http_error_msg:                                                   │
│ ❱ 1021 │   │   │   raise HTTPError(http_error_msg, response=self)                   │
│   1022 │                                                                            │
│   1023 │   def close(self):                                                         │
│   1024 │   │   """Releases the connection back to the pool. Once this method has be │
│                                                                                     │
│ ╭──────────────────────────────────── locals ─────────────────────────────────────╮ │
│ │ http_error_msg = '400 Client Error: Bad Request for url:                        │ │
│ │                  http+docker://localhost/v1.43/containers/'+70                  │ │
│ │         reason = 'Bad Request'                                                  │ │
│ │           self = <Response [400]>                                               │ │
│ ╰─────────────────────────────────────────────────────────────────────────────────╯ │
╰─────────────────────────────────────────────────────────────────────────────────────╯
HTTPError: 400 Client Error: Bad Request for url: 
http+docker://localhost/v1.43/containers/445a28effb56275d3f4e764258f6927f10dc2e2c806156
ae8a508922cfc43583/start

The above exception was the direct cause of the following exception:

╭───────────────────────── Traceback (most recent call last) ─────────────────────────╮
│ /home/<user>/.venv/lib/python3.11/site-packages/exegol/manager/ExegolController.py:5 │
│ 9 in main                                                                           │
│                                                                                     │
│   56 │   │   # Set logger verbosity depending on user input                         │
│   57 │   │   ExeLog.setVerbosity(ParametersManager().verbosity, ParametersManager() │
│   58 │   │   # Start Main controller & Executing action selected by user CLI        │
│ ❱ 59 │   │   ExegolController.call_action()                                         │
│   60 │   except KeyboardInterrupt:                                                  │
│   61 │   │   logger.empty_line()                                                    │
│   62 │   │   logger.info("Exiting")                                                 │
│                                                                                     │
│ /home/<user>/.venv/lib/python3.11/site-packages/exegol/manager/ExegolController.py:3 │
│ 9 in call_action                                                                    │
│                                                                                     │
│   36 │   │   │   # Fetch main operation function                                    │
│   37 │   │   │   main_action = cls.__action()                                       │
│   38 │   │   │   # Execute main function                                            │
│ ❱ 39 │   │   │   main_action()                                                      │
│   40 │   │   else:                                                                  │
│   41 │   │   │   # TODO review required parameters                                  │
│   42 │   │   │   logger.error(f"These parameters are mandatory but missing: {','.jo │
│                                                                                     │
│ ╭──────────────────────────────────── locals ─────────────────────────────────────╮ │
│ │            cls = <class 'exegol.manager.ExegolController.ExegolController'>     │ │
│ │    main_action = <bound method ExegolManager.start of <class                    │ │
│ │                  'exegol.manager.ExegolManager.ExegolManager'>>                 │ │
│ │ missing_params = []                                                             │ │
│ ╰─────────────────────────────────────────────────────────────────────────────────╯ │
│                                                                                     │
│ /home/<user>/.venv/lib/python3.11/site-packages/exegol/manager/ExegolManager.py:82   │
│ in start                                                                            │
│                                                                                     │
│    79 │   │   if not container.isNew():                                             │
│    80 │   │   │   # Check and warn user if some parameters don't apply to the curre │
│    81 │   │   │   cls.__checkUselessParameters()                                    │
│ ❱  82 │   │   container.start()                                                     │
│    83 │   │   container.spawnShell()                                                │
│    84 │                                                                             │
│    85 │   @classmethod                                                              │
│                                                                                     │
│ ╭──────────────────────────────────── locals ─────────────────────────────────────╮ │
│ │       cls = <class 'exegol.manager.ExegolManager.ExegolManager'>                │ │
│ │ container = <exegol.model.ExegolContainer.ExegolContainer object at             │ │
│ │             0x7f43b6dc0710>                                                     │ │
│ ╰─────────────────────────────────────────────────────────────────────────────────╯ │
│                                                                                     │
│ /home/<user>/.venv/lib/python3.11/site-packages/exegol/model/ExegolContainer.py:106  │
│ in start                                                                            │
│                                                                                     │
│   103 │   │   │   logger.info(f"Starting container {self.name}")                    │
│   104 │   │   │   self.preStartSetup()                                              │
│   105 │   │   │   with console.status(f"Waiting to start {self.name}", spinner_styl │
│ ❱ 106 │   │   │   │   self.__container.start()                                      │
│   107 │                                                                             │
│   108 │   def stop(self, timeout: int = 10):                                        │
│   109 │   │   """Stop the docker container"""                                       │
│                                                                                     │
│ ╭──────────────────────────────────── locals ────────────────────────────────────╮  │
│ │ self = <exegol.model.ExegolContainer.ExegolContainer object at 0x7f43b6dc0710> │  │
│ ╰────────────────────────────────────────────────────────────────────────────────╯  │
│                                                                                     │
│ /home/<user>/.venv/lib/python3.11/site-packages/docker/models/containers.py:406 in   │
│ start                                                                               │
│                                                                                     │
│    403 │   │   │   :py:class:`docker.errors.APIError`                               │
│    404 │   │   │   │   If the server returns an error.                              │
│    405 │   │   """                                                                  │
│ ❱  406 │   │   return self.client.api.start(self.id, **kwargs)                      │
│    407 │                                                                            │
│    408 │   def stats(self, **kwargs):                                               │
│    409 │   │   """                                                                  │
│                                                                                     │
│ ╭────────────── locals ──────────────╮                                              │
│ │ kwargs = {}                        │                                              │
│ │   self = <Container: 445a28effb56> │                                              │
│ ╰────────────────────────────────────╯                                              │
│                                                                                     │
│ /home/<user>/.venv/lib/python3.11/site-packages/docker/utils/decorators.py:19 in     │
│ wrapped                                                                             │
│                                                                                     │
│   16 │   │   │   │   raise errors.NullResource(                                     │
│   17 │   │   │   │   │   'Resource ID was not provided'                             │
│   18 │   │   │   │   )                                                              │
│ ❱ 19 │   │   │   return f(self, resource_id, *args, **kwargs)                       │
│   20 │   │   return wrapped                                                         │
│   21 │   return decorator                                                           │
│   22                                                                                │
│                                                                                     │
│ ╭──────────────────────────────────── locals ─────────────────────────────────────╮ │
│ │          args = ()                                                              │ │
│ │             f = <function ContainerApiMixin.start at 0x7f43b6e49c60>            │ │
│ │        kwargs = {}                                                              │ │
│ │   resource_id = '445a28effb56275d3f4e764258f6927f10dc2e2c806156ae8a508922cfc43… │ │
│ │ resource_name = 'container'                                                     │ │
│ │          self = <docker.api.client.APIClient object at 0x7f43b6f19e10>          │ │
│ ╰─────────────────────────────────────────────────────────────────────────────────╯ │
│                                                                                     │
│ /home/<user>/.venv/lib/python3.11/site-packages/docker/api/container.py:1127 in      │
│ start                                                                               │
│                                                                                     │
│   1124 │   │   │   )                                                                │
│   1125 │   │   url = self._url("/containers/{0}/start", container)                  │
│   1126 │   │   res = self._post(url)                                                │
│ ❱ 1127 │   │   self._raise_for_status(res)                                          │
│   1128 │                                                                            │
│   1129 │   @utils.check_resource('container')                                       │
│   1130 │   def stats(self, container, decode=None, stream=True, one_shot=None):     │
│                                                                                     │
│ ╭──────────────────────────────────── locals ─────────────────────────────────────╮ │
│ │      args = ()                                                                  │ │
│ │ container = '445a28effb56275d3f4e764258f6927f10dc2e2c806156ae8a508922cfc43583'  │ │
│ │    kwargs = {}                                                                  │ │
│ │       res = <Response [400]>                                                    │ │
│ │      self = <docker.api.client.APIClient object at 0x7f43b6f19e10>              │ │
│ │       url = 'http+docker://localhost/v1.43/containers/445a28effb56275d3f4e7642… │ │
│ ╰─────────────────────────────────────────────────────────────────────────────────╯ │
│                                                                                     │
│ /home/<user>/.venv/lib/python3.11/site-packages/docker/api/client.py:270 in          │
│ _raise_for_status                                                                   │
│                                                                                     │
│   267 │   │   try:                                                                  │
│   268 │   │   │   response.raise_for_status()                                       │
│   269 │   │   except requests.exceptions.HTTPError as e:                            │
│ ❱ 270 │   │   │   raise create_api_error_from_http_exception(e) from e              │
│   271 │                                                                             │
│   272 │   def _result(self, response, json=False, binary=False):                    │
│   273 │   │   assert not (json and binary)                                          │
│                                                                                     │
│ ╭───────────────────────────── locals ──────────────────────────────╮               │
│ │ response = <Response [400]>                                       │               │
│ │     self = <docker.api.client.APIClient object at 0x7f43b6f19e10> │               │
│ ╰───────────────────────────────────────────────────────────────────╯               │
│                                                                                     │
│ /home/<user>/.venv/lib/python3.11/site-packages/docker/errors.py:39 in               │
│ create_api_error_from_http_exception                                                │
│                                                                                     │
│    36 │   │   │   cls = ImageNotFound                                               │
│    37 │   │   else:                                                                 │
│    38 │   │   │   cls = NotFound                                                    │
│ ❱  39 │   raise cls(e, response=response, explanation=explanation) from e           │
│    40                                                                               │
│    41                                                                               │
│    42 class APIError(requests.exceptions.HTTPError, DockerException):               │
│                                                                                     │
│ ╭──────────────────────────────────── locals ─────────────────────────────────────╮ │
│ │         cls = <class 'docker.errors.APIError'>                                  │ │
│ │           e = HTTPError('400 Client Error: Bad Request for url:                 │ │
│ │               http+docker://localhost/v1.43/containers/445a28effb56275d3f4e764… │ │
│ │ explanation = 'invalid mount config for type "bind": bind source path does not  │ │
│ │               exist: /etc/time'+4                                               │ │
│ │    response = <Response [400]>                                                  │ │
│ ╰─────────────────────────────────────────────────────────────────────────────────╯ │
╰─────────────────────────────────────────────────────────────────────────────────────╯
APIError: 400 Client Error for 
http+docker://localhost/v1.43/containers/445a28effb56275d3f4e764258f6927f10dc2e2c806156
ae8a508922cfc43583/start: Bad Request ("invalid mount config for type "bind": bind 
source path does not exist: /etc/timezone")

Steps To Reproduce

  1. Basic install of exegol with pip3 and exegol containers availables from my previous install
  2. exegol start
  3. Select my container
  4. Error

Exegol Wrapper Version

❯ exegol stop
[*] Exegol is currently in version v4.2.5
[*] Exegol Discord serv.: https://discord.gg/cXThyp7D6P
[*] Exegol documentation: https://exegol.rtfd.io/
[+] We thank Capgemini for supporting the project (helping with dev) 🙏                
[+] We thank HackTheBox for sponsoring the multi-arch support 💚                       
[*] Stopping exegol                                                                    

👽 Available containers                                        
┌───────────────┬─────────┬───────────┬───────────────────────┐
│ Container tag │ State   │ Image tag │ Configurations        │
├───────────────┼─────────┼───────────┼───────────────────────┤
│ new           │ Running │ full      │ Default configuration │
│ THM           │ Stopped │ full      │ Default configuration │
│ ECW           │ Stopped │ full      │ Default configuration │
│ crackme       │ Stopped │ full      │ Default configuration │
│ ESGI          │ Stopped │ full      │ Default configuration │
└───────────────┴─────────┴───────────┴───────────────────────┘

[?] Select a container by its name (new): new
[?] Do you want to select another container? [y/N]: 
[*] Stopping container new                                                             
❯ exegol version -vvv
[*] Exegol is currently in version v4.2.5
[*] Exegol Discord serv.: https://discord.gg/cXThyp7D6P
[*] Exegol documentation: https://exegol.rtfd.io/
[+] We thank Capgemini for supporting the project (helping with dev) 🙏                
[+] We thank HackTheBox for sponsoring the multi-arch support 💚                       
[D] Pip installation: On ✔                                                             
[D] Git source installation: Off 🪓                                                    
[D] Host OS: HostOs.LINUX (DockerEngine.LINUX)                                         
[D] Arch: amd64                                                                        
[D] Raw arch: x86_64                                                                   
[D] Docker desktop: Off 🪓                                                             
[D] Shell type: HostOs.LINUX                                                           
[D] Last wrapper update check: 2023-12-04 00:00:00

### Host OS

Linux

### Configuration of the concerned container

```Text
❯ exegol start
[*] Exegol is currently in version v4.2.5
[*] Exegol Discord serv.: https://discord.gg/cXThyp7D6P
[*] Exegol documentation: https://exegol.rtfd.io/
[+] We thank Capgemini for supporting the project (helping with dev) 🙏                
[+] We thank HackTheBox for sponsoring the multi-arch support 💚                       
[*] Starting exegol                                                                    

👽 Available containers                                        
┌───────────────┬─────────┬───────────┬───────────────────────┐
│ Container tag │ State   │ Image tag │ Configurations        │
├───────────────┼─────────┼───────────┼───────────────────────┤
│ new           │ Stopped │ full      │ Default configuration │
│ THM           │ Stopped │ full      │ Default configuration │
│ ECW           │ Stopped │ full      │ Default configuration │
│ crackme       │ Stopped │ full      │ Default configuration │
│ ESGI          │ Stopped │ full      │ Default configuration │
└───────────────┴─────────┴───────────┴───────────────────────┘

[*] You can use a name that does not already exist to create a new container           
[?] Select a container by its name (new): ^C
[*] Exiting                                                                            
❯ exegol info -v crackme
[*] Exegol is currently in version v4.2.5
[*] Exegol Discord serv.: https://discord.gg/cXThyp7D6P
[*] Exegol documentation: https://exegol.rtfd.io/
[+] We thank Capgemini for supporting the project (helping with dev) 🙏                
[+] We thank HackTheBox for sponsoring the multi-arch support 💚                       
[V] Listing user configurations                                                        

🧠 User configurations                                    
┌────────────────────────────────────────────────────────┐
│ User config file: /home/<user>/.exegol/config.yml       │
│ Private workspace: /home/<user>/.exegol/workspaces      │
│ Exegol resources: /home/<user>/.exegol/exegol-resources │
│ My resources: /home/<user>/.exegol/my-resources         │
│ Auto-check updates: On ✔                               │
│ Auto-remove images: On ✔                               │
│ Auto-update fs: Off 🪓                                 │
│ Default start shell: zsh                               │
│ Shell logging method: asciinema                        │
│ Shell logging compression: On ✔                        │
└────────────────────────────────────────────────────────┘

⭐ Container summary                                                                   
┌──────────────────┬──────────────────────────────────────────────────────────────────┐
│             Name │ crackme                                                          │
│            Image │ full - v.3.1.1 (Up to date) (amd64)                              │
├──────────────────┼──────────────────────────────────────────────────────────────────┤
│    Creation date │ 29/09/2023 14:34                                                 │
│              GUI │ On ✔                                                             │
│          Network │ host                                                             │
│         Timezone │ On ✔                                                             │
│ Exegol resources │ On ✔ (/opt/resources)                                            │
│     My resources │ On ✔ (/opt/my-resources)                                         │
│    Shell logging │ Off 🪓                                                           │
│       Privileged │ Off ✔                                                            │
│        Workspace │ Dedicated (/workspace)                                           │
│             Envs │ DISPLAY=:0                                                       │
│                  │ _JAVA_AWT_WM_NONREPARENTING=1                                    │
│                  │ QT_X11_NO_MITSHM=1                                               │
│                  │ PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/b… │
│          Volumes │ /etc/timezone ➡ /etc/timezone (RO)                               │
│                  │ /home/<user>/.exegol/my-resources ➡ /opt/my-resources             │
│                  │ /home/<user>/.exegol/exegol-resources ➡ /opt/resources            │
│                  │ /tmp/.X11-unix ➡ /tmp/.X11-unix                                  │
│                  │ /home/<user>/.exegol/workspaces/crackme ➡ /workspace              │
│                  │ /etc/localtime ➡ /etc/localtime (RO)                             │
└──────────────────┴──────────────────────────────────────────────────────────────────┘

### Execution logs in debug mode

```Text
❯ exegol -vvv start
[*] Exegol is currently in version v4.2.5
[*] Exegol Discord serv.: https://discord.gg/cXThyp7D6P
[*] Exegol documentation: https://exegol.rtfd.io/
[+] We thank Capgemini for supporting the project (helping with dev) 🙏                
[+] We thank HackTheBox for sponsoring the multi-arch support 💚                       
[*] Starting exegol                                                                    

👽 Available containers                                        
┌───────────────┬─────────┬───────────┬───────────────────────┐
│ Container tag │ State   │ Image tag │ Configurations        │
├───────────────┼─────────┼───────────┼───────────────────────┤
│ new           │ Stopped │ full      │ Default configuration │
│ THM           │ Stopped │ full      │ Default configuration │
│ ECW           │ Stopped │ full      │ Default configuration │
│ crackme       │ Stopped │ full      │ Default configuration │
│ ESGI          │ Stopped │ full      │ Default configuration │
└───────────────┴─────────┴───────────┴───────────────────────┘

[*] You can use a name that does not already exist to create a new container           
[?] Select a container by its name (new): ESGI
[*] Starting container ESGI                                                            
[-] The xhost command is not available on your host. Exegol was unable to allow your   
container to access your graphical environment (or you don't have one).                
[-] It seems that something unexpected happened ...                                    
[-] To draw our attention to the problem and allow us to fix it, you can share your    
error with us (by copying and pasting it with this syntax: ``` <error> ```) by creating
a GitHub issue at this address: https://github.com/ThePorgs/Exegol/issues              
[+] Thank you for your collaboration!                                                  
╭───────────────────────── Traceback (most recent call last) ─────────────────────────╮
│ /home/<user>/.venv/lib/python3.11/site-packages/docker/api/client.py:268 in          │
│ _raise_for_status                                                                   │
│                                                                                     │
│   265 │   def _raise_for_status(self, response):                                    │
│   266 │   │   """Raises stored :class:`APIError`, if one occurred."""               │
│   267 │   │   try:                                                                  │
│ ❱ 268 │   │   │   response.raise_for_status()                                       │
│   269 │   │   except requests.exceptions.HTTPError as e:                            │
│   270 │   │   │   raise create_api_error_from_http_exception(e) from e              │
│   271                                                                               │
│                                                                                     │
│ ╭───────────────────────────── locals ──────────────────────────────╮               │
│ │ response = <Response [400]>                                       │               │
│ │     self = <docker.api.client.APIClient object at 0x7f1a9269ddd0> │               │
│ ╰───────────────────────────────────────────────────────────────────╯               │
│                                                                                     │
│ /home/<user>/.venv/lib/python3.11/site-packages/requests/models.py:1021 in           │
│ raise_for_status                                                                    │
│                                                                                     │
│   1018 │   │   │   )                                                                │
│   1019 │   │                                                                        │
│   1020 │   │   if http_error_msg:                                                   │
│ ❱ 1021 │   │   │   raise HTTPError(http_error_msg, response=self)                   │
│   1022 │                                                                            │
│   1023 │   def close(self):                                                         │
│   1024 │   │   """Releases the connection back to the pool. Once this method has be │
│                                                                                     │
│ ╭──────────────────────────────────── locals ─────────────────────────────────────╮ │
│ │ http_error_msg = '400 Client Error: Bad Request for url:                        │ │
│ │                  http+docker://localhost/v1.43/containers/'+70                  │ │
│ │         reason = 'Bad Request'                                                  │ │
│ │           self = <Response [400]>                                               │ │
│ ╰─────────────────────────────────────────────────────────────────────────────────╯ │
╰─────────────────────────────────────────────────────────────────────────────────────╯
HTTPError: 400 Client Error: Bad Request for url: 
http+docker://localhost/v1.43/containers/445a28effb56275d3f4e764258f6927f10dc2e2c806156
ae8a508922cfc43583/start

The above exception was the direct cause of the following exception:

╭───────────────────────── Traceback (most recent call last) ─────────────────────────╮
│ /home/<user>/.venv/lib/python3.11/site-packages/exegol/manager/ExegolController.py:5 │
│ 9 in main                                                                           │
│                                                                                     │
│   56 │   │   # Set logger verbosity depending on user input                         │
│   57 │   │   ExeLog.setVerbosity(ParametersManager().verbosity, ParametersManager() │
│   58 │   │   # Start Main controller & Executing action selected by user CLI        │
│ ❱ 59 │   │   ExegolController.call_action()                                         │
│   60 │   except KeyboardInterrupt:                                                  │
│   61 │   │   logger.empty_line()                                                    │
│   62 │   │   logger.info("Exiting")                                                 │
│                                                                                     │
│ /home/<user>/.venv/lib/python3.11/site-packages/exegol/manager/ExegolController.py:3 │
│ 9 in call_action                                                                    │
│                                                                                     │
│   36 │   │   │   # Fetch main operation function                                    │
│   37 │   │   │   main_action = cls.__action()                                       │
│   38 │   │   │   # Execute main function                                            │
│ ❱ 39 │   │   │   main_action()                                                      │
│   40 │   │   else:                                                                  │
│   41 │   │   │   # TODO review required parameters                                  │
│   42 │   │   │   logger.error(f"These parameters are mandatory but missing: {','.jo │
│                                                                                     │
│ ╭──────────────────────────────────── locals ─────────────────────────────────────╮ │
│ │            cls = <class 'exegol.manager.ExegolController.ExegolController'>     │ │
│ │    main_action = <bound method ExegolManager.start of <class                    │ │
│ │                  'exegol.manager.ExegolManager.ExegolManager'>>                 │ │
│ │ missing_params = []                                                             │ │
│ ╰─────────────────────────────────────────────────────────────────────────────────╯ │
│                                                                                     │
│ /home/<user>/.venv/lib/python3.11/site-packages/exegol/manager/ExegolManager.py:82   │
│ in start                                                                            │
│                                                                                     │
│    79 │   │   if not container.isNew():                                             │
│    80 │   │   │   # Check and warn user if some parameters don't apply to the curre │
│    81 │   │   │   cls.__checkUselessParameters()                                    │
│ ❱  82 │   │   container.start()                                                     │
│    83 │   │   container.spawnShell()                                                │
│    84 │                                                                             │
│    85 │   @classmethod                                                              │
│                                                                                     │
│ ╭──────────────────────────────────── locals ─────────────────────────────────────╮ │
│ │       cls = <class 'exegol.manager.ExegolManager.ExegolManager'>                │ │
│ │ container = <exegol.model.ExegolContainer.ExegolContainer object at             │ │
│ │             0x7f1a9274a810>                                                     │ │
│ ╰─────────────────────────────────────────────────────────────────────────────────╯ │
│                                                                                     │
│ /home/<user>/.venv/lib/python3.11/site-packages/exegol/model/ExegolContainer.py:106  │
│ in start                                                                            │
│                                                                                     │
│   103 │   │   │   logger.info(f"Starting container {self.name}")                    │
│   104 │   │   │   self.preStartSetup()                                              │
│   105 │   │   │   with console.status(f"Waiting to start {self.name}", spinner_styl │
│ ❱ 106 │   │   │   │   self.__container.start()                                      │
│   107 │                                                                             │
│   108 │   def stop(self, timeout: int = 10):                                        │
│   109 │   │   """Stop the docker container"""                                       │
│                                                                                     │
│ ╭──────────────────────────────────── locals ────────────────────────────────────╮  │
│ │ self = <exegol.model.ExegolContainer.ExegolContainer object at 0x7f1a9274a810> │  │
│ ╰────────────────────────────────────────────────────────────────────────────────╯  │
│                                                                                     │
│ /home/<user>/.venv/lib/python3.11/site-packages/docker/models/containers.py:406 in   │
│ start                                                                               │
│                                                                                     │
│    403 │   │   │   :py:class:`docker.errors.APIError`                               │
│    404 │   │   │   │   If the server returns an error.                              │
│    405 │   │   """                                                                  │
│ ❱  406 │   │   return self.client.api.start(self.id, **kwargs)                      │
│    407 │                                                                            │
│    408 │   def stats(self, **kwargs):                                               │
│    409 │   │   """                                                                  │
│                                                                                     │
│ ╭────────────── locals ──────────────╮                                              │
│ │ kwargs = {}                        │                                              │
│ │   self = <Container: 445a28effb56> │                                              │
│ ╰────────────────────────────────────╯                                              │
│                                                                                     │
│ /home/<user>/.venv/lib/python3.11/site-packages/docker/utils/decorators.py:19 in     │
│ wrapped                                                                             │
│                                                                                     │
│   16 │   │   │   │   raise errors.NullResource(                                     │
│   17 │   │   │   │   │   'Resource ID was not provided'                             │
│   18 │   │   │   │   )                                                              │
│ ❱ 19 │   │   │   return f(self, resource_id, *args, **kwargs)                       │
│   20 │   │   return wrapped                                                         │
│   21 │   return decorator                                                           │
│   22                                                                                │
│                                                                                     │
│ ╭──────────────────────────────────── locals ─────────────────────────────────────╮ │
│ │          args = ()                                                              │ │
│ │             f = <function ContainerApiMixin.start at 0x7f1a927c9c60>            │ │
│ │        kwargs = {}                                                              │ │
│ │   resource_id = '445a28effb56275d3f4e764258f6927f10dc2e2c806156ae8a508922cfc43… │ │
│ │ resource_name = 'container'                                                     │ │
│ │          self = <docker.api.client.APIClient object at 0x7f1a9269ddd0>          │ │
│ ╰─────────────────────────────────────────────────────────────────────────────────╯ │
│                                                                                     │
│ /home/<user>/.venv/lib/python3.11/site-packages/docker/api/container.py:1127 in      │
│ start                                                                               │
│                                                                                     │
│   1124 │   │   │   )                                                                │
│   1125 │   │   url = self._url("/containers/{0}/start", container)                  │
│   1126 │   │   res = self._post(url)                                                │
│ ❱ 1127 │   │   self._raise_for_status(res)                                          │
│   1128 │                                                                            │
│   1129 │   @utils.check_resource('container')                                       │
│   1130 │   def stats(self, container, decode=None, stream=True, one_shot=None):     │
│                                                                                     │
│ ╭──────────────────────────────────── locals ─────────────────────────────────────╮ │
│ │      args = ()                                                                  │ │
│ │ container = '445a28effb56275d3f4e764258f6927f10dc2e2c806156ae8a508922cfc43583'  │ │
│ │    kwargs = {}                                                                  │ │
│ │       res = <Response [400]>                                                    │ │
│ │      self = <docker.api.client.APIClient object at 0x7f1a9269ddd0>              │ │
│ │       url = 'http+docker://localhost/v1.43/containers/445a28effb56275d3f4e7642… │ │
│ ╰─────────────────────────────────────────────────────────────────────────────────╯ │
│                                                                                     │
│ /home/<user>/.venv/lib/python3.11/site-packages/docker/api/client.py:270 in          │
│ _raise_for_status                                                                   │
│                                                                                     │
│   267 │   │   try:                                                                  │
│   268 │   │   │   response.raise_for_status()                                       │
│   269 │   │   except requests.exceptions.HTTPError as e:                            │
│ ❱ 270 │   │   │   raise create_api_error_from_http_exception(e) from e              │
│   271 │                                                                             │
│   272 │   def _result(self, response, json=False, binary=False):                    │
│   273 │   │   assert not (json and binary)                                          │
│                                                                                     │
│ ╭───────────────────────────── locals ──────────────────────────────╮               │
│ │ response = <Response [400]>                                       │               │
│ │     self = <docker.api.client.APIClient object at 0x7f1a9269ddd0> │               │
│ ╰───────────────────────────────────────────────────────────────────╯               │
│                                                                                     │
│ /home/<user>/.venv/lib/python3.11/site-packages/docker/errors.py:39 in               │
│ create_api_error_from_http_exception                                                │
│                                                                                     │
│    36 │   │   │   cls = ImageNotFound                                               │
│    37 │   │   else:                                                                 │
│    38 │   │   │   cls = NotFound                                                    │
│ ❱  39 │   raise cls(e, response=response, explanation=explanation) from e           │
│    40                                                                               │
│    41                                                                               │
│    42 class APIError(requests.exceptions.HTTPError, DockerException):               │
│                                                                                     │
│ ╭──────────────────────────────────── locals ─────────────────────────────────────╮ │
│ │         cls = <class 'docker.errors.APIError'>                                  │ │
│ │           e = HTTPError('400 Client Error: Bad Request for url:                 │ │
│ │               http+docker://localhost/v1.43/containers/445a28effb56275d3f4e764… │ │
│ │ explanation = 'invalid mount config for type "bind": bind source path does not  │ │
│ │               exist: /etc/time'+4                                               │ │
│ │    response = <Response [400]>                                                  │ │
│ ╰─────────────────────────────────────────────────────────────────────────────────╯ │
╰─────────────────────────────────────────────────────────────────────────────────────╯
APIError: 400 Client Error for 
http+docker://localhost/v1.43/containers/445a28effb56275d3f4e764258f6927f10dc2e2c806156
ae8a508922cfc43583/start: Bad Request ("invalid mount config for type "bind": bind 
source path does not exist: /etc/timezone")


### Exception

_No response_

### Anything else?

_No response_
Dramelac commented 11 months ago

Hello

You error seems to be related to /etc/timezone not xhost. The xhost warning is an indicator of why GUI may not working. But the crash is because docker can't find /etc/timezone.

Can you ls -l to check ?

MathisLec commented 11 months ago

Hello, Thanks for your help. I've set up the file and can now access my containers. However, I still can't access the GUI tools. Should I install a Xorg server? or just install xhost tool?

Dramelac commented 11 months ago

Good news then :)

However, I still can't access the GUI tools. Should I install a Xorg server? or just install xhost tool?

Try to install the xorg-xhost package and see if it fix your problem

MathisLec commented 11 months ago
  1. sudo pacman -S xorg-xhost
  2. xhost +SI:localuser:<user> See here.

And it works well. Thanks a lot!