<?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: Katt</title>
    <description>The latest articles on DEV Community by Katt (@katt_coffee_linux).</description>
    <link>https://dev.to/katt_coffee_linux</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3969245%2F5402bae0-8c4a-4ba2-86c6-085e0f947296.png</url>
      <title>DEV Community: Katt</title>
      <link>https://dev.to/katt_coffee_linux</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/katt_coffee_linux"/>
    <language>en</language>
    <item>
      <title>HashiCorp Vault in Docker Compose fails with "address already in use" on port 8200 and IPC_LOCK warning</title>
      <dc:creator>Katt</dc:creator>
      <pubDate>Fri, 05 Jun 2026 06:22:07 +0000</pubDate>
      <link>https://dev.to/katt_coffee_linux/hashicorp-vault-in-docker-compose-fails-with-address-already-in-use-on-port-8200-and-ipclock-43k7</link>
      <guid>https://dev.to/katt_coffee_linux/hashicorp-vault-in-docker-compose-fails-with-address-already-in-use-on-port-8200-and-ipclock-43k7</guid>
      <description>&lt;p&gt;I'm trying to run HashiCorp Vault (v1.15.0) in Docker Compose on Ubuntu 26.04 LTS (ARM64), but the container immediately exits with two errors:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IPC_LOCK warning: "Couldn't start vault with IPC_LOCK. Disabling IPC_LOCK, please use --cap-add IPC_LOCK" Port binding error: "Error initializing listener of type tcp: listen tcp4 0.0.0.0:8200: bind: address already in use" 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Despite lsof, netstat, and ss showing nothing listening on port 8200, Docker insists the port is occupied. This happens consistently even after:&lt;/p&gt;

&lt;p&gt;Stopping all containers&lt;br&gt;
Restarting Docker daemon&lt;br&gt;
Changing Vault to use port 8201&lt;br&gt;
Removing all Docker networks and containers&lt;br&gt;
What I've tried: Basic troubleshooting:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;lsof &lt;span class="nt"&gt;-i&lt;/span&gt; :8200 → No output
&lt;span class="nb"&gt;sudo &lt;/span&gt;netstat &lt;span class="nt"&gt;-tulpn&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; :8200 → No output
ss &lt;span class="nt"&gt;-tulpn&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; :8200 → No output
docker container prune &lt;span class="nt"&gt;-f&lt;/span&gt; and docker network prune &lt;span class="nt"&gt;-f&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Docker-specific checks:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker ps &lt;span class="nt"&gt;-a&lt;/span&gt; &lt;span class="nt"&gt;--format&lt;/span&gt; &lt;span class="s1"&gt;'{{.ID}} {{.Names}} {{.Ports}}'&lt;/span&gt; | &lt;span class="nb"&gt;grep &lt;/span&gt;8200 → No containers
docker inspect &amp;lt;container&amp;gt; &lt;span class="nt"&gt;--format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'{{.State.ExitCode}}'&lt;/span&gt; → Returns 1 &lt;span class="o"&gt;(&lt;/span&gt;failure&lt;span class="o"&gt;)&lt;/span&gt;
Changed Vault port mapping from 8200:8200 to 8201:8200 &lt;span class="k"&gt;in &lt;/span&gt;docker-compose
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Configuration verification:&lt;/p&gt;

&lt;p&gt;TLS certificates exist and are mounted correctly&lt;br&gt;
Vault config file syntax validated&lt;br&gt;
Volume mounts confirmed working&lt;br&gt;
Current configuration: docker-compose.yml (Vault section):&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;vault&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;container.name&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;hashicorp/vault:1.15.0&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;8201:8200"&lt;/span&gt;  &lt;span class="c1"&gt;# Changed from 8200&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;VAULT_ADDR&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://0.0.0.0:8200"&lt;/span&gt;
      &lt;span class="na"&gt;VAULT_DISABLE_MLOCK&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1"&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./vault-data:/vault/data&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./vault-config:/vault/config&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./vault-logs:/vault/logs&lt;/span&gt;
    &lt;span class="na"&gt;command&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;server -config=/vault/config/vault.hcl&lt;/span&gt;
&lt;span class="na"&gt;vault.hcl&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

&lt;span class="s"&gt;storage "file" {&lt;/span&gt;
  &lt;span class="s"&gt;path = "/vault/data"&lt;/span&gt;
&lt;span class="err"&gt;}&lt;/span&gt;

&lt;span class="s"&gt;listener "tcp" {&lt;/span&gt;
  &lt;span class="s"&gt;address         = "0.0.0.0:8200"&lt;/span&gt;
  &lt;span class="s"&gt;tls_cert_file   = "/vault/config/tls.crt"&lt;/span&gt;
  &lt;span class="s"&gt;tls_key_file    = "/vault/config/tls.key"&lt;/span&gt;
  &lt;span class="s"&gt;tls_min_version = "tls12"&lt;/span&gt;
  &lt;span class="s"&gt;tls_disable     = &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="err"&gt;}&lt;/span&gt;

&lt;span class="s"&gt;api_addr = "https://0.0.0.0:8200"&lt;/span&gt;
&lt;span class="s"&gt;cluster_addr = "https://0.0.0.0:8201"&lt;/span&gt;
&lt;span class="s"&gt;ui = &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="s"&gt;disable_mlock = &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Logs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;container.name | Couldn't start vault with IPC_LOCK. Disabling IPC_LOCK, please use --cap-add IPC_LOCK
container.name | Error parsing listener configuration.
container.name | Error initializing listener of type tcp: listen tcp4 0.0.0.0:8200: bind: address already in use
container.name | 2026-06-03T14:59:08.290Z [INFO]  proxy environment: http_proxy="" https_proxy="" no_proxy=""
container.name | 2026-06-03T14:59:08.297Z [INFO]  incrementing seal generation: generation=1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Environment:&lt;/p&gt;

&lt;p&gt;Docker version 29.5.2&lt;br&gt;
Docker Compose version v5.1.4&lt;br&gt;
Ubuntu 26.04 LTS (ARM64)&lt;br&gt;
Kernel: 7.0.0-15-generic&lt;br&gt;
Questions:&lt;/p&gt;

&lt;p&gt;&lt;del&gt;IPC_LOCK: Should I add --cap-add IPC_LOCK to the Docker Compose service? If so, how do I properly configure this in compose? I tried adding cap_add: ["IPC_LOCK"] but got "unknown field" errors.&lt;/del&gt;&lt;br&gt;
&lt;del&gt;Port 8200 "already in use": How can I diagnose what's actually holding this port when standard Linux tools show it's free? This feels like a Docker port allocator issue, but I've already restarted Docker and pruned everything.&lt;/del&gt;&lt;br&gt;
General approach: Am I missing something fundamental about running Vault in Docker? The goal is to use Vault to securely store API credentials for an Airflow DAG instead of using environment variables or Airflow Variables. Any insights would be greatly appreciated, I've been stuck on this for days!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;UPDATE!&lt;/strong&gt;&lt;br&gt;
I also posted this in r/docker on reddit and was offered a suggestion for the IPC_LOCK error that worked phenomenally. As simple as adding&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;cap_add&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; 
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;IPC_LOCK&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;to my HashiCorp file fixed my IPC_LOCK warning: "Couldn't start vault with IPC_LOCK. Disabling IPC_LOCK, please use --cap-add IPC_LOCK" Port error. I could still use help with my Port 8200 error. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;FINAL UPDATE&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After days of troubleshooting, I finally found the root cause. The &lt;code&gt;docker compose prune&lt;/code&gt; and &lt;code&gt;docker network prune&lt;/code&gt; commands weren't cleaning up the old container metadata because Docker keeps internal state about port allocations even after containers exit. I thought &lt;code&gt;docker container prune -f&lt;/code&gt; was killing everything but ultimately &lt;code&gt;docker container prune -f&lt;/code&gt; doesn't always remove orphaned containers. I'm not even going to call that container an orphan... &lt;code&gt;docker container prune -f&lt;/code&gt; kills orphan containers, it just doesn't kill zombie containers. I had to use &lt;code&gt;docker rm -f whatever.your.container.name.is&lt;/code&gt;. Then, the magic happened... Am I being dramatic? Probably, but damn it... This zombie has been kicking my ass for two days. Also... It took 7 cups of coffee and 4 hours of sleep respectively. Alright... Thank you again Begalldota from reddit's r/docker community. My journey is still going but Im passed this phase.&lt;/p&gt;

</description>
      <category>docker</category>
      <category>linux</category>
      <category>networking</category>
      <category>security</category>
    </item>
  </channel>
</rss>
