<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Fariha Tabassum</title>
    <description>The latest articles on DEV Community by Fariha Tabassum (@fariha127).</description>
    <link>https://dev.to/fariha127</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4118070%2Fec824f03-8f32-44c1-a617-7c37fb919613.jpg</url>
      <title>DEV Community: Fariha Tabassum</title>
      <link>https://dev.to/fariha127</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/fariha127"/>
    <language>en</language>
    <item>
      <title>Koha Testing Docker on Windows WSL: Common Setup Problems and Fixes</title>
      <dc:creator>Fariha Tabassum</dc:creator>
      <pubDate>Wed, 09 Sep 2026 18:43:01 +0000</pubDate>
      <link>https://dev.to/fariha127/koha-testing-docker-on-windows-wsl-common-setup-problems-and-fixes-55fi</link>
      <guid>https://dev.to/fariha127/koha-testing-docker-on-windows-wsl-common-setup-problems-and-fixes-55fi</guid>
      <description>&lt;p&gt;Koha Testing Docker on WSL: Common Setup Problems and Fixes&lt;br&gt;
While setting up Koha Testing Docker (KTD) on Windows using WSL and Docker Desktop, I encountered several problems related to Docker configuration, port conflicts, and accessing Koha through the browser.&lt;br&gt;
This guide summarizes the problems I encountered, how I diagnosed them, and how I fixed them.&lt;br&gt;
The goal is to provide a practical troubleshooting guide for anyone setting up Koha Testing Docker on Windows with WSL and Docker Desktop.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Environment&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;My setup consisted of:&lt;br&gt;
Windows&lt;br&gt;
WSL (Ubuntu)&lt;br&gt;
Docker Desktop&lt;br&gt;
Koha Testing Docker (KTD)&lt;/p&gt;
&lt;h2&gt;
  
  
  1. ktd pull Could Not Find Docker
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Problem&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When I initially ran:&lt;br&gt;
&lt;code&gt;ktd pull&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;KTD produced an error similar to:&lt;br&gt;
.../ktd: line 725: /usr/bin/docker: No such file or directory&lt;/p&gt;

&lt;p&gt;At first, this was confusing because Docker was already installed and working.&lt;/p&gt;

&lt;p&gt;I checked:&lt;br&gt;
&lt;code&gt;which docker&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;and received:&lt;br&gt;
&lt;code&gt;/usr/bin/docker&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;I also ran:&lt;br&gt;
&lt;code&gt;/usr/bin/docker --version&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;which successfully displayed the installed Docker version.&lt;br&gt;
Therefore, Docker itself was not missing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Cause&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The problem was related to how the KTD configuration was being read.&lt;br&gt;
The .env file was not being interpreted correctly, and it also contained Windows-style CRLF line endings.&lt;/p&gt;

&lt;p&gt;I checked the file using:&lt;br&gt;
&lt;code&gt;cat -v .env&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If the output contains ^M at the end of lines, that indicates Windows-style line endings.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;code&gt;DOCKER_BINARY=/usr/bin/docker^M&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The ^M is the carriage return character from Windows line endings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Fix&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I made sure that .env contained:&lt;br&gt;
&lt;code&gt;DOCKER_BINARY=/usr/bin/docker&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;I also converted the .env file to Unix-style line endings.&lt;br&gt;
After fixing the configuration, I ran:&lt;br&gt;
&lt;code&gt;ktd pull&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;again, and it worked successfully.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Lesson&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When using configuration files between Windows and WSL/Linux, always check for CRLF line endings if a shell script behaves unexpectedly.&lt;/p&gt;
&lt;h2&gt;
  
  
  2. Port 8080 Was Already in Use
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Problem&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After successfully pulling the KTD images, I tried to start the environment:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ktd up -d&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;However, Docker returned an error similar to:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ports are not available: exposing port TCP 0.0.0.0:8080&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This indicated that port 8080 on the Windows host was already being used by another application.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Finding Which Process Was Using the Port&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Since the host operating system was Windows, I checked the port from PowerShell:&lt;br&gt;
&lt;code&gt;netstat -ano | findstr :8080&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This showed the process ID (PID) using port 8080.&lt;/p&gt;

&lt;p&gt;I then identified the process with:&lt;br&gt;
&lt;code&gt;Get-Process -Id &amp;lt;PID&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;In my case, the process was:&lt;br&gt;
&lt;code&gt;TNSLSNR&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;TNSLSNR is associated with Oracle Database's listener service.&lt;/p&gt;

&lt;p&gt;Therefore, port 8080 could not be assigned to Koha.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Fix&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead of stopping the Oracle service, I changed the Koha port mapping so that Koha would use other available ports.&lt;br&gt;
The final &lt;code&gt;compose/local_ports.yml&lt;/code&gt; configuration was:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;koha&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;8082:8082"&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;8081:8081"&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This resulted in:&lt;br&gt;
&lt;strong&gt;&lt;em&gt;8081 → Koha Staff Interface&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;&lt;em&gt;8082 → Koha OPAC&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
I then ran:&lt;br&gt;
&lt;code&gt;ktd up -d&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The containers started successfully.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Lesson&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When Docker reports that a port is already in use, first identify which process is using it. If the port belongs to another important service, changing the Docker port mapping is often safer than stopping that service.&lt;/p&gt;
&lt;h2&gt;
  
  
  3. ERR_EMPTY_RESPONSE When Opening the OPAC
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Problem&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After the containers started successfully, I tried accessing the Koha OPAC through the browser.&lt;/p&gt;

&lt;p&gt;Sometimes the browser displayed:&lt;br&gt;
&lt;code&gt;ERR_EMPTY_RESPONSE&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;At this point, it was not clear whether the problem was caused by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;li&gt;Koha&lt;/li&gt;
&lt;li&gt;Apache&lt;/li&gt;
&lt;li&gt;The database&lt;/li&gt;
&lt;li&gt;Port configuration&lt;/li&gt;
&lt;li&gt;Windows/WSL networking&lt;/li&gt;
&lt;li&gt;Hostname resolution&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of reinstalling Koha, I checked each layer separately.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1:&lt;/strong&gt; Check the KTD Containers&lt;/p&gt;

&lt;p&gt;First, I checked whether the required containers were running:&lt;br&gt;
&lt;code&gt;docker ps&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The Koha, MariaDB, and Memcached containers were running.&lt;br&gt;
This confirmed that the basic Docker environment was up.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2:&lt;/strong&gt; Check Apache&lt;/p&gt;

&lt;p&gt;Next, I checked the Apache service inside the Koha container:&lt;br&gt;
&lt;code&gt;docker exec -it kohadev-koha-1 service apache2 status&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Apache was running successfully.&lt;br&gt;
Therefore, the problem was not simply that the web server had stopped.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3:&lt;/strong&gt; Check Apache Virtual Hosts&lt;/p&gt;

&lt;p&gt;I then checked Apache's virtual-host configuration:&lt;br&gt;
&lt;code&gt;docker exec -it kohadev-koha-1 apache2ctl -S&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The configuration showed:&lt;br&gt;
*:8082    kohadev.myDNSname.org&lt;br&gt;
*:8081    kohadev-intra.myDNSname.org&lt;/p&gt;

&lt;p&gt;This confirmed that Apache had virtual hosts configured for both Koha interfaces.&lt;br&gt;
The configuration therefore matched the intended port setup:&lt;br&gt;
&lt;strong&gt;&lt;em&gt;8081 → Staff Interface&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;&lt;em&gt;8082 → OPAC&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4:&lt;/strong&gt; Verify Koha Is Listening on the Correct Ports&lt;/p&gt;

&lt;p&gt;Next, I checked which ports were actually listening inside the Koha container:&lt;br&gt;
&lt;code&gt;docker exec -it kohadev-koha-1 ss -lntp&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Apache was listening on:&lt;br&gt;
&lt;strong&gt;0.0.0.0:8081&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;0.0.0.0:8082&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This was important because it confirmed that Apache was not only configured for those ports, but was actually listening on them.&lt;br&gt;
I then tested both services directly from inside the container:&lt;br&gt;
&lt;code&gt;docker exec -it kohadev-koha-1 curl -I http://localhost:8081&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;and:&lt;br&gt;
&lt;code&gt;docker exec -it kohadev-koha-1 curl -I http://localhost:8082&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Both returned:&lt;br&gt;
&lt;code&gt;HTTP/1.1 200 OK&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This confirmed that Koha and Apache were responding correctly inside the container.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5:&lt;/strong&gt; Verify the Koha Database&lt;/p&gt;

&lt;p&gt;Since the web server was responding, I also checked whether the Koha instance and database had been initialized correctly.&lt;br&gt;
First, I checked the available Koha instances:&lt;br&gt;
&lt;code&gt;docker exec -it kohadev-koha-1 koha-list&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The command returned:&lt;br&gt;
&lt;code&gt;kohadev&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This confirmed that the kohadev Koha instance existed.&lt;br&gt;
I then checked the MariaDB databases:&lt;br&gt;
&lt;code&gt;docker exec -it kohadev-koha-1 \&lt;/code&gt;&lt;br&gt;
&lt;code&gt;mysql -h db -u root -ppassword \&lt;/code&gt;&lt;br&gt;
&lt;code&gt;-e "SHOW DATABASES;"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The database:&lt;br&gt;
&lt;code&gt;koha_kohadev&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;was present.&lt;br&gt;
Finally, I checked its tables:&lt;br&gt;
&lt;code&gt;docker exec -it kohadev-koha-1 \&lt;/code&gt;&lt;br&gt;
&lt;code&gt;mysql -h db -u root -ppassword \&lt;/code&gt;&lt;br&gt;
&lt;code&gt;-e "USE koha_kohadev; SHOW TABLES;"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This returned the Koha database tables.&lt;br&gt;
Therefore, the database was properly created and populated.&lt;br&gt;
This ruled out problems such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Missing Koha database&lt;/li&gt;
&lt;li&gt;Missing Koha instance&lt;/li&gt;
&lt;li&gt;Uninitialized database&lt;/li&gt;
&lt;li&gt;Empty database&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 6:&lt;/strong&gt; Verify the Connection From Windows&lt;br&gt;
Since Koha was working correctly inside the container, I checked whether Windows could access the services through the mapped ports.&lt;br&gt;
From Windows PowerShell, I ran:&lt;br&gt;
&lt;code&gt;_curl.exe -I http://localhost:8081_&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;and:&lt;br&gt;
&lt;code&gt;_curl.exe -I http://localhost:8082_&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Both returned:&lt;br&gt;
&lt;code&gt;HTTP/1.1 200 OK&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;I then tested the actual Koha hostnames.&lt;br&gt;
For the Staff Interface:&lt;br&gt;
&lt;code&gt;_curl.exe -I http://kohadev-intra.myDNSname.org:8081_&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;For the OPAC:&lt;br&gt;
&lt;code&gt;curl.exe -I http://kohadev.myDNSname.org:8082&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Both returned:&lt;br&gt;
&lt;code&gt;HTTP/1.1 200 OK&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This confirmed that the complete connection path was working:&lt;br&gt;
Windows&lt;br&gt;
   ↓&lt;br&gt;
Docker port mapping&lt;br&gt;
   ↓&lt;br&gt;
Koha container&lt;br&gt;
   ↓&lt;br&gt;
Apache&lt;br&gt;
   ↓&lt;br&gt;
Koha&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Result&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The diagnostic checks showed that Koha itself was working correctly.&lt;br&gt;
The following were all confirmed:&lt;br&gt;
Docker containers were running.&lt;br&gt;
Apache was running.&lt;br&gt;
Apache virtual hosts were configured correctly.&lt;br&gt;
Apache was listening on ports 8081 and 8082.&lt;br&gt;
Koha responded with &lt;code&gt;HTTP/1.1 200 OK&lt;/code&gt; inside the container.&lt;br&gt;
The kohadev Koha instance existed.&lt;br&gt;
The koha_kohadev database existed and contained Koha tables.&lt;br&gt;
Windows could reach both ports.&lt;br&gt;
The Koha hostnames also returned &lt;code&gt;HTTP/1.1 200 OK&lt;/code&gt;.&lt;br&gt;
Therefore, the &lt;code&gt;ERR_EMPTY_RESPONSE&lt;/code&gt; was not caused by a broken Koha installation or database.&lt;br&gt;
The important lesson was to diagnose the problem layer by layer instead of immediately reinstalling the environment.&lt;/p&gt;
&lt;h2&gt;
  
  
  4. Final Working Configuration
&lt;/h2&gt;

&lt;p&gt;After resolving the port conflict and verifying the services, the final port configuration was:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;koha&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;8082:8082"&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;8081:8081"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The two Koha interfaces were accessible as follows.&lt;br&gt;
Staff Interface&lt;br&gt;
&lt;a href="http://kohadev-intra.myDNSname.org:8081" rel="noopener noreferrer"&gt;&lt;em&gt;http://kohadev-intra.myDNSname.org:8081&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This opens the Koha Staff Interface, where librarians or administrators can manage the library system.&lt;br&gt;
OPAC&lt;br&gt;
&lt;a href="http://kohadev.myDNSname.org:8082" rel="noopener noreferrer"&gt;&lt;em&gt;http://kohadev.myDNSname.org:8082&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This opens the Koha Online Public Access Catalog (OPAC).&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Useful Troubleshooting Commands
&lt;/h2&gt;

&lt;p&gt;The following commands were useful throughout the troubleshooting process.&lt;br&gt;
&lt;strong&gt;Check Docker&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;which docker&lt;/code&gt;&lt;br&gt;
&lt;code&gt;docker --version&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check KTD Containers&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;docker ps&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check Koha Instance&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;docker exec -it kohadev-koha-1 koha-list&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check Apache&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;docker exec -it kohadev-koha-1 service apache2 status&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check Apache Virtual Hosts&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;docker exec -it kohadev-koha-1 apache2ctl -S&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check Listening Ports&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;docker exec -it kohadev-koha-1 ss -lntp&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Test Koha From Inside the Container&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;docker exec -it kohadev-koha-1 curl -I http://localhost:8081&lt;/code&gt;&lt;br&gt;
&lt;code&gt;docker exec -it kohadev-koha-1 curl -I http://localhost:8082&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;Check Whether a Port Is Already Occupied on Windows&lt;/strong&gt;&lt;br&gt;
From PowerShell:&lt;br&gt;
&lt;code&gt;netstat -ano | findstr :8080&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Then identify the process:&lt;/strong&gt;&lt;br&gt;
Get-Process -Id &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Test Koha From Windows&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;curl.exe -I http://localhost:8081&lt;/code&gt;&lt;br&gt;
&lt;code&gt;curl.exe -I http://localhost:8082&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;And test the hostnames:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;curl.exe -I http://kohadev-intra.myDNSname.org:8081&lt;/code&gt;&lt;br&gt;
&lt;code&gt;curl.exe -I http://kohadev.myDNSname.org:8082&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Setting up Koha Testing Docker on Windows with WSL and Docker Desktop involved several issues, but each one could be isolated by checking the system layer by layer.&lt;/p&gt;

&lt;p&gt;The main problems were:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;KTD could not correctly use Docker&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
→ The .env configuration and Windows-style line endings were corrected.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Port 8080 was already occupied&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ The process using the port was identified as TNSLSNR, and Koha was moved to ports 8081 and 8082.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;The browser sometimes showed &lt;code&gt;ERR_EMPTY_RESPONSE&lt;/code&gt;&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
→ Instead of reinstalling Koha, the containers, Apache, virtual hosts, listening ports, database, and Windows connection were checked individually.&lt;/p&gt;

&lt;p&gt;The overall troubleshooting approach was:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Docker&lt;br&gt;
   ↓&lt;br&gt;
Port availability&lt;br&gt;
   ↓&lt;br&gt;
KTD containers&lt;br&gt;
   ↓&lt;br&gt;
Apache&lt;br&gt;
   ↓&lt;br&gt;
Apache virtual hosts&lt;br&gt;
   ↓&lt;br&gt;
Listening ports&lt;br&gt;
   ↓&lt;br&gt;
Koha instance&lt;br&gt;
   ↓&lt;br&gt;
Database&lt;br&gt;
   ↓&lt;br&gt;
Windows connection&lt;br&gt;
   ↓&lt;br&gt;
Browser&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The most important lesson is that troubleshooting each layer separately is much more effective than immediately reinstalling the entire environment.&lt;br&gt;
If Koha is not opening, first determine where the connection fails. Once each layer is verified, the actual cause becomes much easier to identify.&lt;/p&gt;

</description>
      <category>docker</category>
      <category>linux</category>
      <category>opensource</category>
      <category>debugging</category>
    </item>
  </channel>
</rss>
