{"id":13859,"date":"2016-07-08T12:15:39","date_gmt":"2016-07-08T09:15:39","guid":{"rendered":"https:\/\/www.webcodegeeks.com\/?p=13859"},"modified":"2016-07-06T22:51:18","modified_gmt":"2016-07-06T19:51:18","slug":"using-honcho-create-multi-process-docker-container","status":"publish","type":"post","link":"https:\/\/www.webcodegeeks.com\/devops\/using-honcho-create-multi-process-docker-container\/","title":{"rendered":"Using Honcho to Create a Multi-Process Docker Container"},"content":{"rendered":"<p>A common misconception is that Docker is only for creating single-process or single-service containers. While it\u2019s true that the <code>Dockerfile<\/code> and <code>docker run<\/code> command options are designed for running a single process, that doesn\u2019t mean that Docker itself doesn\u2019t allow for a multi-process Docker container.<\/p>\n<p>In fact, Docker\u2019s documentation has a very useful <a href=\"https:\/\/docs.docker.com\/engine\/admin\/using_supervisord\/\">tutorial<\/a> on how to run multi-process containers using Supervisor to manage the processes within the container.<\/p>\n<h2>Why I Don\u2019t Use Supervisor for Docker Containers<\/h2>\n<p>While Supervisor is a great tool (I\u2019m a big fan), I don\u2019t personally like using it for multi-process Docker containers. This is due to how Supervisor handles process failures.<\/p>\n<p>Supervisor is an application designed to start processes and keep those processes running if they fail. This feature can be very useful in some cases if configured appropriately. If left to its default configuration however, you can easily find yourself with a container that is not providing the service it is supposed to provide, and you may not even know that service is down.<\/p>\n<p>By default, Supervisor will auto-restart processes that fail. If the managed process fails three times in a row or exits in a way Supervisor is not configured to handle, the <code>supervisord<\/code> process will stop restarting the process. The problem is that the <code>supervisord<\/code> process itself does not exit; it simply logs the event.<\/p>\n<p>This means that the container will still be running, but the important service within the container is dead.<\/p>\n<h2>Using Honcho to Create a Multi-Process Container<\/h2>\n<p><a href=\"https:\/\/github.com\/nickstenning\/honcho\">Honcho<\/a> is a tool for managing <a href=\"https:\/\/devcenter.heroku.com\/articles\/procfile\">Procfile-based applications<\/a>. A <code>Procfile<\/code> is a file that specifies which commands should be executed to start an application via tools like Honcho.<\/p>\n<p>We can use Honcho to start and manage all of the processes defined within a <code>Procfile<\/code>. The nice thing about Honcho is if any one of these processes exit abnormally, by default the whole Honcho process and sub-processes are stopped. This causes the Docker container to exit, which is the desired effect for this type of scenario.<\/p>\n<p>In this article, we will use Honcho to create a custom multi-process Docker container. This container will be used to host a Redis service that supports TLS connections.<\/p>\n<h2>Redis-tls Docker container<\/h2>\n<p>Redis is a highly popular in-memory datastore. It does not, however, currently support SSL or TLS. To add TLS support to Redis, we will need to run another application called <strong>stunnel<\/strong>. The stunnel service is an SSL\/TLS proxy that can be used as a reverse proxy to perform TLS offloading for services that do not natively support TLS.<\/p>\n<p>While it is possible to deploy stunnel as a stand-alone container and have it linked to a Redis container, for this article we will be combining these two processes into a single container.<\/p>\n<p>The <code>redis-tls<\/code> Docker container we will be launching today will run two processes: the first being <code>stunnel<\/code> and the second being <code>redis-server<\/code>. As Redis traffic arrives to the containe, it will first pass through <code>stunnel<\/code>, which will perform all of the TLS communication. From there, <code>stunnel<\/code> will then forward the unencrypted traffic to the <code>redis-server<\/code> instance.<\/p>\n<p>This allows for communications outside of the container to be encrypted, with non-encrypted traffic being contained within the container.<\/p>\n<p>Since a <code>redis-tls<\/code> container image does not exist today, we will also be creating our own custom Docker image as part of this article. To start this process, we will first need to define a <code>Dockerfile<\/code>.<\/p>\n<h4>Creating a custom Docker image from a Redis base<\/h4>\n<p>The first instruction in any <code>Dockerfile<\/code> is usually <code>FROM<\/code>. This instruction is used to define what base image the Docker container should be created from.<\/p>\n<p>Since we will be creating a Redis container with TLS support, we can base our container from the standard <code>redis<\/code> Docker image by specifying <code>redis<\/code> in the <code>FROM<\/code> instruction: <code>FROM redis<\/code><\/p>\n<p>A benefit of basing our image on the official <code>redis<\/code> image is that our image will inherit all of the latest features of the official <code>redis<\/code> image when updates occur. This keeps the <code>redis-server<\/code> installation up to date with the latest security and bug fixes.<\/p>\n<h4>Installing stunnel and pip<\/h4>\n<p>With the <code>redis<\/code> image as our base image, we don\u2019t have to go through the effort of installing Redis. We will however need to install the <code>stunnel<\/code> package. We\u2019ll also need to install the <code>python-pip<\/code> package to install <code>pip<\/code>. The <code>pip<\/code> command will be used to install Honcho within the <code>Dockerfile<\/code>.<\/p>\n<p>To install these packages, we will add a <code>RUN<\/code> instruction calling the Apt package manager.<\/p>\n<pre class=\"brush:php\">FROM redis\r\n\r\nRUN apt-get update --fix-missing &amp;&amp; \\\r\n    apt-get install -y stunnel python-pip &amp;&amp; \\\r\n    rm -rf \/var\/lib\/apt\/lists\/*<\/pre>\n<p>The above will run three instructions during the Docker build process:<\/p>\n<ul>\n<li><strong>First instruction:<\/strong> the <code>apt-get<\/code> command with the <code>update<\/code> parameter. This updates the Apt repository cache within the container.<\/li>\n<li><strong>Second instruction:<\/strong> the <code>apt-get<\/code> command, but this time with the <code>install<\/code> parameter. This instruction will install the <code>stunnel<\/code> and <code>python-pip<\/code> packages.<\/li>\n<li><strong>Third instruction:<\/strong> <code>rm -rf \/var\/lib\/apt\/lists\/*<\/code>, which clears Apt\u2019s package cache. This is useful for keeping our Docker container small as the <code>apt-get update<\/code> command creates quite a bit of cached data.<\/li>\n<\/ul>\n<h4>Installing Honcho<\/h4>\n<p>After the installation of packages with Apt, the next build step will be to install Honcho. To do this, we\u2019ll use the <code>RUN<\/code> instruction again but this time to call the <code>pip<\/code> command.<\/p>\n<pre class=\"brush:php\">FROM redis\r\n\r\nRUN apt-get update --fix-missing &amp;&amp; \\\r\n    apt-get install -y stunnel python-pip &amp;&amp; \\\r\n    rm -rf \/var\/lib\/apt\/lists\/*\r\nRUN pip install honcho<\/pre>\n<p>After this build step, we will have completed all of the installation steps. Next, we\u2019ll focus on configuration of both stunnel and Honcho.<\/p>\n<h4>Configuring stunnel<\/h4>\n<p>With stunnel, some configuration is needed before it can provide the TLS reverse proxy functionality. Luckily, the stunnel configuration is fairly straight forward.<\/p>\n<p>To configure stunnel, we need to specify that stunnel runs in the foreground, which port to accept connections on (<code>6379<\/code> the default Redis port), where to forward those connections to (<code>6380<\/code> a port unique for this container), and the certificates to use for the TLS encryption.<\/p>\n<p>We will add all of these configurations into the <code>stunnel.conf<\/code> file within our local build directory.<\/p>\n<pre class=\"brush:php\">foreground = yes\r\ndebug = 7\r\n\r\n[redis]\r\naccept = 0.0.0.0:6379\r\nconnect = localhost:6380\r\ncert = \/certs\/cert.pem\r\nkey = \/certs\/key.pem<\/pre>\n<p>Once the <code>stunnel.conf<\/code> file is created, we need tell Docker to add this file to the container during build. We can do this by using the <code>ADD<\/code> instruction within the <code>Dockerfile<\/code>.<\/p>\n<pre class=\"brush:php\">FROM redis\r\n\r\nRUN apt-get update --fix-missing &amp;&amp; \\\r\n    apt-get install -y stunnel python-pip &amp;&amp; \\\r\n    rm -rf \/var\/lib\/apt\/lists\/*\r\nRUN pip install honcho\r\n\r\nADD stunnel.conf \/stunnel.conf<\/pre>\n<p>During the Docker build process, Docker will place the <code>stunnel.conf<\/code> file from the build directory into the <code>\/<\/code> directory within the container. One important item to remember is that when we start the <code>stunnel<\/code> process, we will need to specify the location of this configuration file. This configuration will go into the <code>Procfile<\/code>.<\/p>\n<h4>Creating a Procfile<\/h4>\n<p>As described earlier in this article, Procfiles are used by tools like Honcho to start up applications. As with the <code>stunnel.conf<\/code> file, we will need to first create a <code>Procfile<\/code> within our local build directory.<\/p>\n<pre class=\"brush:php\">stunnel: \/usr\/bin\/stunnel4 \/stunnel.conf\r\nredis: \/usr\/local\/bin\/redis-server \/etc\/redis\/redis.conf<\/pre>\n<p>The above is the contents of our <code>Procfile<\/code>; the format is quite simple. The first element in a line is the name of the process, and the second (after the <code>:<\/code>) is the command to run. One of the useful things about <code>Procfile<\/code> tools like Honcho is that you can control and launch processes by name. For example, if we wished to start just the Redis process, we could do so by executing <code>honcho start redis<\/code>.<\/p>\n<p>With the <code>Procfile<\/code> define, we once again need to add it to the container using the <code>ADD<\/code> instruction within the <code>Dockerfile<\/code>.<\/p>\n<pre class=\"brush:php\">FROM redis\r\n\r\nRUN apt-get update --fix-missing &amp;&amp; \\\r\n    apt-get install -y stunnel python-pip &amp;&amp; \\\r\n    rm -rf \/var\/lib\/apt\/lists\/*\r\nRUN pip install honcho\r\n\r\nADD stunnel.conf \/stunnel.conf\r\nADD Procfile \/Procfile<\/pre>\n<p>With the <code>stunnel.conf<\/code> and <code>Procfile<\/code> defined and added to the <code>Dockerfile<\/code> build steps, we can now move on to the <code>Dockerfile<\/code> instructions for starting our applications.<\/p>\n<h4>Starting Honcho<\/h4>\n<p>To execute commands within our <code>Dockerfile<\/code>, we previously used the <code>RUN<\/code> instruction. These instructions are only executed during the build process for Docker containers. To specify how to start our application, we will use the <code>CMD<\/code> instruction.<\/p>\n<pre class=\"brush:php\">FROM redis\r\n\r\nRUN apt-get update --fix-missing &amp;&amp; \\\r\n    apt-get install -y stunnel python-pip &amp;&amp; \\\r\n    rm -rf \/var\/lib\/apt\/lists\/*\r\nRUN pip install honcho\r\n\r\nADD stunnel.conf \/stunnel.conf\r\nADD Procfile \/Procfile\r\n\r\nWORKDIR \/\r\nCMD honcho start<\/pre>\n<p>The command to start our application is simply <code>honcho start<\/code>. This tells Honcho to read through the <code>Procfile<\/code> and start all processes defined within it. You may notice another <code>Dockerfile<\/code> instruction shown above as well: <code>WORKDIR<\/code>. The <code>WORKDIR<\/code> instruction is used to define the working directory that the command within <code>CMD<\/code> is executed. Since the <code>Procfile<\/code> is in <code>\/<\/code>, the working directory should also be <code>\/<\/code>. By default, Honcho checks the current working directory.<\/p>\n<h2>Building the Container<\/h2>\n<p>At this point, our <code>Dockerfile<\/code> is defined, and configuration files have been created. Our next step is to build the container using the <code>docker build<\/code> command.<\/p>\n<pre class=\"brush:php\">$ docker build -t redis-tls .\r\nSuccessfully built a7bbe84cb52b<\/pre>\n<p>Once the image build is complete, we can go ahead and start the container.<\/p>\n<h2>Starting the container<\/h2>\n<p>To start the container, we will use <code>docker run<\/code> just like any other Docker container. However, with this specific container, there are a few other options we need to pass.<\/p>\n<p><code>$ docker run -d -p 6379:6379 -v \/path\/to\/certs:\/certs --name redis-tls redis-tls<\/code><\/p>\n<p>When executing the <code>docker run<\/code> command, we passed the <code>-d<\/code> flag, which starts the container in \u201cdetached\u201d mode, sending the container into the background.<\/p>\n<p>We also passed the <code>-p<\/code> flag with the options of <code>6379:6379<\/code>. This option sets up port forwarding from the Docker host port <code>6379<\/code> to port <code>6379<\/code> within the container. This will be needed to connect to the stunnel and Redis services.<\/p>\n<p>We also passed the <code>-v<\/code> flag which sets up Docker volumes. When passing the argument of <code>\/path\/to\/certs:\/certs<\/code>, we are mapping the host directory of <code>\/path\/to\/certs<\/code> to <code>\/certs<\/code> within the container. This allows for the <code>cert.pem<\/code> and <code>key.pem<\/code> to be created on the host and referenced from within the container.<\/p>\n<h2>Validating That Everything Is Running<\/h2>\n<p>To validate whether or not the processes have started appropriately, we can use the <code>docker logs<\/code> command.<\/p>\n<pre class=\"brush:php\">$ docker logs redis-tls\r\n23:44:59 redis.1   | 13:M 30 Jun 23:44:59.544 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never &gt; \/sys\/kernel\/mm\/transparent_hugepage\/enabled' as root, and add it to your \/etc\/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.\r\n23:44:59 redis.1   | 13:M 30 Jun 23:44:59.544 * The server is now ready to accept connections on port 6380\r\n23:44:59 system    | stunnel.1 started (pid=12)\r\n23:44:59 stunnel.1 | 2016.06.30 23:44:59 LOG5[17]: Configuration successful\r\n23:44:59 stunnel.1 | 2016.06.30 23:44:59 LOG7[17]: Listening file descriptor created (FD=6)\r\n23:44:59 stunnel.1 | 2016.06.30 23:44:59 LOG7[17]: Service [redis] (FD=6) bound to 0.0.0.0:6379<\/pre>\n<p>From the above, we can see that both the <code>redis<\/code> and <code>stunnel<\/code> processes are running, but what happens if one of the processes were to stop?<\/p>\n<pre class=\"brush:php\">$ docker logs redis-tls\r\n20:39:15 system    | redis.1 stopped (rc=0)\r\n20:39:15 system    | sending SIGTERM to stunnel.1 (pid 12)<\/pre>\n<p>If one process stops, Honcho will send a signal to all other processes to stop them as well. This means that we can have a multi-process container stop in the same fashion as a single-process container during failures.<\/p>\n<h2>Summary<\/h2>\n<p>In today\u2019s article, we created a custom multi-process Docker container with Honcho, we created a Redis container with TLS support, and we learned a little about sharing directories from a Docker host to a Docker container.<\/p>\n<p>For those interested in using the <code>redis-tls<\/code> container, you can do so by simply executing a <code>docker run<\/code> command using the <code>madflojo\/redis-tls<\/code> image:<\/p>\n<p><code>$ docker run -d -p 6379:6379 -v \/path\/to\/certs:\/certs --name redis-tls madflojo\/redis-tls<\/code><\/p>\n<p>The contents of the build directory and <code>Dockerfile<\/code> are also <a href=\"https:\/\/github.com\/madflojo\/redis-tls-dockerfile\/\">available on GitHub<\/a> for those interested in contributing or modifying the <code>redis-tls<\/code> image.<\/p>\n<p>Have another tool for running multi-process containers? Throw a comment below and share your experiences.<\/p>\n<div class=\"attribution\">\n<table>\n<tbody>\n<tr>\n<td><span class=\"reference\">Reference: <\/span><\/td>\n<td><a href=\"https:\/\/blog.codeship.com\/using-honcho-create-multi-process-docker-container\/\">Using Honcho to Create a Multi-Process Docker Container<\/a> from our <a href=\"http:\/\/www.webcodegeeks.com\/join-us\/wcg\/\">WCG partner<\/a>\u00a0Ben Cane at the <a href=\"http:\/\/blog.codeship.com\/\">Codeship Blog<\/a> blog.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>A common misconception is that Docker is only for creating single-process or single-service containers. While it\u2019s true that the Dockerfile and docker run command options are designed for running a single process, that doesn\u2019t mean that Docker itself doesn\u2019t allow for a multi-process Docker container. In fact, Docker\u2019s documentation has a very useful tutorial on &hellip;<\/p>\n","protected":false},"author":158,"featured_media":10356,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17],"tags":[217,379],"class_list":["post-13859","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-devops","tag-docker","tag-honcho"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Using Honcho to Create a Multi-Process Docker Container - Web Code Geeks - 2026<\/title>\n<meta name=\"description\" content=\"A common misconception is that Docker is only for creating single-process or single-service containers. While it\u2019s true that the Dockerfile and docker run\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.webcodegeeks.com\/devops\/using-honcho-create-multi-process-docker-container\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Using Honcho to Create a Multi-Process Docker Container - Web Code Geeks - 2026\" \/>\n<meta property=\"og:description\" content=\"A common misconception is that Docker is only for creating single-process or single-service containers. While it\u2019s true that the Dockerfile and docker run\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.webcodegeeks.com\/devops\/using-honcho-create-multi-process-docker-container\/\" \/>\n<meta property=\"og:site_name\" content=\"Web Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/webcodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2016-07-08T09:15:39+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Benjamin Cane\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@webcodegeeks\" \/>\n<meta name=\"twitter:site\" content=\"@webcodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Benjamin Cane\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/using-honcho-create-multi-process-docker-container\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/using-honcho-create-multi-process-docker-container\/\"},\"author\":{\"name\":\"Benjamin Cane\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/4f5d918df9c19fab91b5b205357ce0b8\"},\"headline\":\"Using Honcho to Create a Multi-Process Docker Container\",\"datePublished\":\"2016-07-08T09:15:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/using-honcho-create-multi-process-docker-container\/\"},\"wordCount\":1635,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/using-honcho-create-multi-process-docker-container\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg\",\"keywords\":[\"Docker\",\"Honcho\"],\"articleSection\":[\"DevOps\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.webcodegeeks.com\/devops\/using-honcho-create-multi-process-docker-container\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/using-honcho-create-multi-process-docker-container\/\",\"url\":\"https:\/\/www.webcodegeeks.com\/devops\/using-honcho-create-multi-process-docker-container\/\",\"name\":\"Using Honcho to Create a Multi-Process Docker Container - Web Code Geeks - 2026\",\"isPartOf\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/using-honcho-create-multi-process-docker-container\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/using-honcho-create-multi-process-docker-container\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg\",\"datePublished\":\"2016-07-08T09:15:39+00:00\",\"description\":\"A common misconception is that Docker is only for creating single-process or single-service containers. While it\u2019s true that the Dockerfile and docker run\",\"breadcrumb\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/using-honcho-create-multi-process-docker-container\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.webcodegeeks.com\/devops\/using-honcho-create-multi-process-docker-container\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/using-honcho-create-multi-process-docker-container\/#primaryimage\",\"url\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg\",\"contentUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/using-honcho-create-multi-process-docker-container\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.webcodegeeks.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"DevOps\",\"item\":\"https:\/\/www.webcodegeeks.com\/category\/devops\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Using Honcho to Create a Multi-Process Docker Container\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#website\",\"url\":\"https:\/\/www.webcodegeeks.com\/\",\"name\":\"Web Code Geeks\",\"description\":\"Web Developers Resource Center\",\"publisher\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.webcodegeeks.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\/\/www.webcodegeeks.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png\",\"contentUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/webcodegeeks\",\"https:\/\/x.com\/webcodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/4f5d918df9c19fab91b5b205357ce0b8\",\"name\":\"Benjamin Cane\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/09c6af2f1a7430456089189937094b817ef1b7c75ab9968bfd3ec35d938d914b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/09c6af2f1a7430456089189937094b817ef1b7c75ab9968bfd3ec35d938d914b?s=96&d=mm&r=g\",\"caption\":\"Benjamin Cane\"},\"description\":\"Benjamin Cane is a systems architect in the financial services industry. He writes about Linux systems administration on his blog and has recently published his first book, Red Hat Enterprise Linux Troubleshooting Guide.\",\"url\":\"https:\/\/www.webcodegeeks.com\/author\/benjamin-cane\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Using Honcho to Create a Multi-Process Docker Container - Web Code Geeks - 2026","description":"A common misconception is that Docker is only for creating single-process or single-service containers. While it\u2019s true that the Dockerfile and docker run","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.webcodegeeks.com\/devops\/using-honcho-create-multi-process-docker-container\/","og_locale":"en_US","og_type":"article","og_title":"Using Honcho to Create a Multi-Process Docker Container - Web Code Geeks - 2026","og_description":"A common misconception is that Docker is only for creating single-process or single-service containers. While it\u2019s true that the Dockerfile and docker run","og_url":"https:\/\/www.webcodegeeks.com\/devops\/using-honcho-create-multi-process-docker-container\/","og_site_name":"Web Code Geeks","article_publisher":"https:\/\/www.facebook.com\/webcodegeeks","article_published_time":"2016-07-08T09:15:39+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg","type":"image\/jpeg"}],"author":"Benjamin Cane","twitter_card":"summary_large_image","twitter_creator":"@webcodegeeks","twitter_site":"@webcodegeeks","twitter_misc":{"Written by":"Benjamin Cane","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.webcodegeeks.com\/devops\/using-honcho-create-multi-process-docker-container\/#article","isPartOf":{"@id":"https:\/\/www.webcodegeeks.com\/devops\/using-honcho-create-multi-process-docker-container\/"},"author":{"name":"Benjamin Cane","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/4f5d918df9c19fab91b5b205357ce0b8"},"headline":"Using Honcho to Create a Multi-Process Docker Container","datePublished":"2016-07-08T09:15:39+00:00","mainEntityOfPage":{"@id":"https:\/\/www.webcodegeeks.com\/devops\/using-honcho-create-multi-process-docker-container\/"},"wordCount":1635,"commentCount":0,"publisher":{"@id":"https:\/\/www.webcodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.webcodegeeks.com\/devops\/using-honcho-create-multi-process-docker-container\/#primaryimage"},"thumbnailUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg","keywords":["Docker","Honcho"],"articleSection":["DevOps"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.webcodegeeks.com\/devops\/using-honcho-create-multi-process-docker-container\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.webcodegeeks.com\/devops\/using-honcho-create-multi-process-docker-container\/","url":"https:\/\/www.webcodegeeks.com\/devops\/using-honcho-create-multi-process-docker-container\/","name":"Using Honcho to Create a Multi-Process Docker Container - Web Code Geeks - 2026","isPartOf":{"@id":"https:\/\/www.webcodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.webcodegeeks.com\/devops\/using-honcho-create-multi-process-docker-container\/#primaryimage"},"image":{"@id":"https:\/\/www.webcodegeeks.com\/devops\/using-honcho-create-multi-process-docker-container\/#primaryimage"},"thumbnailUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg","datePublished":"2016-07-08T09:15:39+00:00","description":"A common misconception is that Docker is only for creating single-process or single-service containers. While it\u2019s true that the Dockerfile and docker run","breadcrumb":{"@id":"https:\/\/www.webcodegeeks.com\/devops\/using-honcho-create-multi-process-docker-container\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.webcodegeeks.com\/devops\/using-honcho-create-multi-process-docker-container\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/devops\/using-honcho-create-multi-process-docker-container\/#primaryimage","url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg","contentUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.webcodegeeks.com\/devops\/using-honcho-create-multi-process-docker-container\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.webcodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"DevOps","item":"https:\/\/www.webcodegeeks.com\/category\/devops\/"},{"@type":"ListItem","position":3,"name":"Using Honcho to Create a Multi-Process Docker Container"}]},{"@type":"WebSite","@id":"https:\/\/www.webcodegeeks.com\/#website","url":"https:\/\/www.webcodegeeks.com\/","name":"Web Code Geeks","description":"Web Developers Resource Center","publisher":{"@id":"https:\/\/www.webcodegeeks.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.webcodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.webcodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.webcodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/webcodegeeks","https:\/\/x.com\/webcodegeeks"]},{"@type":"Person","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/4f5d918df9c19fab91b5b205357ce0b8","name":"Benjamin Cane","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/09c6af2f1a7430456089189937094b817ef1b7c75ab9968bfd3ec35d938d914b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/09c6af2f1a7430456089189937094b817ef1b7c75ab9968bfd3ec35d938d914b?s=96&d=mm&r=g","caption":"Benjamin Cane"},"description":"Benjamin Cane is a systems architect in the financial services industry. He writes about Linux systems administration on his blog and has recently published his first book, Red Hat Enterprise Linux Troubleshooting Guide.","url":"https:\/\/www.webcodegeeks.com\/author\/benjamin-cane\/"}]}},"_links":{"self":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts\/13859","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/users\/158"}],"replies":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/comments?post=13859"}],"version-history":[{"count":0,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts\/13859\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/media\/10356"}],"wp:attachment":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/media?parent=13859"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/categories?post=13859"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/tags?post=13859"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}