<titledata-rh="true">Docker Private Share | Zrok</title><metadata-rh="true"name="viewport"content="width=device-width,initial-scale=1"><metadata-rh="true"name="twitter:card"content="summary_large_image"><metadata-rh="true"property="og:url"content="https://docs.zrok.io/docs/guides/docker-share/docker_private_share_guide/"><metadata-rh="true"property="og:locale"content="en"><metadata-rh="true"name="docusaurus_locale"content="en"><metadata-rh="true"name="docsearch:language"content="en"><metadata-rh="true"name="docusaurus_version"content="current"><metadata-rh="true"name="docusaurus_tag"content="docs-default-current"><metadata-rh="true"name="docsearch:version"content="current"><metadata-rh="true"name="docsearch:docusaurus_tag"content="docs-default-current"><metadata-rh="true"property="og:title"content="Docker Private Share | Zrok"><metadata-rh="true"name="description"content="With zrok, you can privately share a server app that's running in Docker, or any server that's reachable by the zrok container. Then, a zrok private access running somewhere else can use the private share. In this guide we'll cover both sides: the private share and the private access."><metadata-rh="true"property="og:description"content="With zrok, you can privately share a server app that's running in Docker, or any server that's reachable by the zrok container. Then, a zrok private access running somewhere else can use the private share. In this guide we'll cover both sides: the private share and the private access."><linkdata-rh="true"rel="icon"href="/img/space-ziggy.png"><linkdata-rh="true"rel="canonical"href="https://docs.zrok.io/docs/guides/docker-share/docker_private_share_guide/"><linkdata-rh="true"rel="alternate"href="https://docs.zrok.io/docs/guides/docker-share/docker_private_share_guide/"hreflang="en"><linkdata-rh="true"rel="alternate"href="https://docs.zrok.io/docs/guides/docker-share/docker_private_share_guide/"hreflang="x-default"><linkdata-rh="true"rel="preconnect"href="https://CO73R59OLO-dsn.algolia.net"crossorigin="anonymous"><linkrel="preconnect"href="https://www.google-analytics.com">
<p>With zrok, you can privately share a server app that's running in Docker, or any server that's reachable by the zrok container. Then, a zrok private access running somewhere else can use the private share. In this guide we'll cover both sides: the private share and the private access.</p>
<p>Here's a short article with an overview of <ahref="/docs/concepts/sharing-private/">private sharing with zrok</a>.</p>
<h2class="anchor anchorWithStickyNavbar_LWe7"id="walkthrough-video">Walkthrough Video<ahref="#walkthrough-video"class="hash-link"aria-label="Direct link to Walkthrough Video"title="Direct link to Walkthrough Video"></a></h2>
<iframewidth="100%"height="315"src="https://www.youtube.com/embed/HxyvtFAvwUE"title="YouTube video player"frameborder="0"allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"></iframe>
<h2class="anchor anchorWithStickyNavbar_LWe7"id="before-you-begin">Before You Begin<ahref="#before-you-begin"class="hash-link"aria-label="Direct link to Before You Begin"title="Direct link to Before You Begin"></a></h2>
<p>To follow this guide you will need <ahref="https://docs.docker.com/get-docker/"target="_blank"rel="noopener noreferrer">Docker</a> and <ahref="https://docs.docker.com/compose/install/"target="_blank"rel="noopener noreferrer">the Docker Compose plugin</a> for running <code>docker compose</code> commands in your terminal.</p>
<p>If you have installed Docker Desktop on macOS or Windows then you are all set.</p>
<h2class="anchor anchorWithStickyNavbar_LWe7"id="begin-sharing-privately-with-zrok-in-docker">Begin Sharing Privately with zrok in Docker<ahref="#begin-sharing-privately-with-zrok-in-docker"class="hash-link"aria-label="Direct link to Begin Sharing Privately with zrok in Docker"title="Direct link to Begin Sharing Privately with zrok in Docker"></a></h2>
<p>First, let's create the private share.</p>
<ol>
<li>
<p>Make a folder on your computer to use as a Docker Compose project for your zrok private share.</p>
</li>
<li>
<p>In your terminal, change directory to your newly-created project folder.</p>
</li>
<li>
<p>Download <ahref="/zrok-private-share/compose.yml"target="_blank"rel="noopener noreferrer">the zrok-private-share Docker Compose project file</a> into your new project folder and make sure it's named <code>compose.yml</code>.</p>
</li>
<li>
<p>Copy your zrok environment token from the zrok web console to your clipboard and paste it in a file named <code>.env</code> in the same folder like this:</p>
<p>If you are self-hosting zrok then it's important to set your API endpoint URL too. If you're using the hosted zrok service then you can skip this step.</p>
<p>Keep track of this token so you can use it in your zrok private access project.</p>
</li>
</ol>
<h2class="anchor anchorWithStickyNavbar_LWe7"id="access-the-private-share">Access the Private Share<ahref="#access-the-private-share"class="hash-link"aria-label="Direct link to Access the Private Share"title="Direct link to Access the Private Share"></a></h2>
<p>Now that we have a private share we can access it with the zrok command or by running a separate Docker Compose project.</p>
<ol>
<li>
<p>Make a folder on your computer to use as a Docker Compose project for your zrok private access.</p>
</li>
<li>
<p>In your terminal, change directory to your newly-created project folder.</p>
</li>
<li>
<p>Download <ahref="/zrok-private-access/compose.yml"target="_blank"rel="noopener noreferrer">the zrok-private-access Docker Compose project file</a> into your new project folder and make sure it's named <code>compose.yml</code>.</p>
</li>
<li>
<p>Copy your zrok environment token from the zrok web console to your clipboard and paste it in a file named <code>.env</code> in the same folder like this:</p>
<p>Now copy the zrok private access token from the zrok private share project's output to your clipboard and paste it in the same file named <code>.env</code> here in your private share project folder like this:</p>
<p>Now your zrok private access proxy is ready on <ahref="http://127.0.0.1:9191"target="_blank"rel="noopener noreferrer">http://127.0.0.1:9191</a>. You can visit the demo web server in your browser.</p>
</li>
</ol>
<h2class="anchor anchorWithStickyNavbar_LWe7"id="going-further-with-private-access">Going Further with Private Access<ahref="#going-further-with-private-access"class="hash-link"aria-label="Direct link to Going Further with Private Access"title="Direct link to Going Further with Private Access"></a></h2>
<ol>
<li>
<p>Try changing the demo web server used in the private share project. One alternative demo server is provided: <code>httpbin</code>.</p>
</li>
<li>
<p>Try accessing the private share from <em>inside</em> a container running in the private access project. One demo client is provided: <code>demo-client</code>. You can run it like this.</p>
<p>You'll see in the terminal output that the demo-client container is getting a response from the private share indicating the source IP of the request from the perspective of the demo server: <code>httpbin</code> that's running in the private share project.</p>
</li>
</ol>
<h2class="anchor anchorWithStickyNavbar_LWe7"id="cleaning-up">Cleaning Up<ahref="#cleaning-up"class="hash-link"aria-label="Direct link to Cleaning Up"title="Direct link to Cleaning Up"></a></h2>
<p>Run the "down" command in both Compose projects to destroy them when you're all done. This will stop the running containers and delete zrok environments' storage volumes. Then delete the selected zrok environment by clicking "Actions" in the web console.</p>