{"id":41344,"date":"2026-05-24T15:50:41","date_gmt":"2026-05-24T08:50:41","guid":{"rendered":"https:\/\/interdata.vn\/blog\/?p=41344"},"modified":"2026-05-24T15:59:09","modified_gmt":"2026-05-24T08:59:09","slug":"huong-dan-cai-docker-compose-tren-vps","status":"publish","type":"post","link":"https:\/\/interdata.vn\/blog\/huong-dan-cai-docker-compose-tren-vps\/","title":{"rendered":"H\u01b0\u1edbng D\u1eabn C\u00e0i Docker Compose Tr\u00ean VPS Th\u00e0nh C\u00f4ng 100%"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 counter-hierarchy ez-toc-counter ez-toc-white ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">N\u1ed8I DUNG<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 eztoc-toggle-hide-by-default' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/interdata.vn\/blog\/huong-dan-cai-docker-compose-tren-vps\/#1-Docker-Compose-la-gi-va-tai-sao-ban-can-no-tren-VPS\" >1. Docker Compose l\u00e0 g\u00ec v\u00e0 t\u1ea1i sao b\u1ea1n c\u1ea7n n\u00f3 tr\u00ean VPS?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/interdata.vn\/blog\/huong-dan-cai-docker-compose-tren-vps\/#2-Chuan-bi-nhung-gi-truoc-khi-cai-Docker-Compose-tren-VPS\" >2. Chu\u1ea9n b\u1ecb nh\u1eefng g\u00ec tr\u01b0\u1edbc khi c\u00e0i Docker Compose tr\u00ean VPS?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/interdata.vn\/blog\/huong-dan-cai-docker-compose-tren-vps\/#3-Huong-dan-cai-Docker-Compose-tren-VPS-Ubuntu-chi-tiet-Phien-ban-moi-nhat\" >3. H\u01b0\u1edbng d\u1eabn c\u00e0i Docker Compose tr\u00ean VPS Ubuntu chi ti\u1ebft (Phi\u00ean b\u1ea3n m\u1edbi nh\u1ea5t)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/interdata.vn\/blog\/huong-dan-cai-docker-compose-tren-vps\/#4-Kiem-tra-cai-dat-va-chay-thu-du-an-dau-tien\" >4. Ki\u1ec3m tra c\u00e0i \u0111\u1eb7t v\u00e0 ch\u1ea1y th\u1eed d\u1ef1 \u00e1n \u0111\u1ea7u ti\u00ean<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/interdata.vn\/blog\/huong-dan-cai-docker-compose-tren-vps\/#5-Khac-phuc-nhanh-3-loi-thuong-gap-khi-dung-Docker-Compose-tren-VPS\" >5. Kh\u1eafc ph\u1ee5c nhanh 3 l\u1ed7i th\u01b0\u1eddng g\u1eb7p khi d\u00f9ng Docker Compose tr\u00ean VPS<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/interdata.vn\/blog\/huong-dan-cai-docker-compose-tren-vps\/#6-Cac-cau-hoi-thuong-gap-khi-cai-dat-Docker-Compose-tren-VPS-FAQ\" >6. C\u00e1c c\u00e2u h\u1ecfi th\u01b0\u1eddng g\u1eb7p khi c\u00e0i \u0111\u1eb7t Docker Compose tr\u00ean VPS (FAQ)<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/interdata.vn\/blog\/huong-dan-cai-docker-compose-tren-vps\/#Q1-Co-nen-cai-Docker-Compose-bang-Snap-tren-Ubuntu-VPS-khong\" >Q1: C\u00f3 n\u00ean c\u00e0i Docker Compose b\u1eb1ng Snap tr\u00ean Ubuntu VPS kh\u00f4ng?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/interdata.vn\/blog\/huong-dan-cai-docker-compose-tren-vps\/#Q2-Docker-Compose-V1-va-V2-khac-nhau-nhu-the-nao\" >Q2: Docker Compose V1 v\u00e0 V2 kh\u00e1c nhau nh\u01b0 th\u1ebf n\u00e0o?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/interdata.vn\/blog\/huong-dan-cai-docker-compose-tren-vps\/#Q3-Lam-the-nao-de-go-cai-dat-hoan-toan-Docker-Compose-khoi-VPS\" >Q3: L\u00e0m th\u1ebf n\u00e0o \u0111\u1ec3 g\u1ee1 c\u00e0i \u0111\u1eb7t ho\u00e0n to\u00e0n Docker Compose kh\u1ecfi VPS?<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<p>B\u1ea1n v\u1eeba thu\u00ea m\u1ed9t VPS m\u1edbi v\u00e0 mu\u1ed1n ch\u1ea1y \u0111\u1ed3ng th\u1eddi c\u1ea3 Nginx, Node.js l\u1eabn MySQL nh\u01b0ng l\u01b0\u1eddi ph\u1ea3i c\u1ea5u h\u00ecnh th\u1ee7 c\u00f4ng t\u1eebng d\u1ecbch v\u1ee5? Docker Compose sinh ra \u0111\u1ec3 gi\u1ea3i quy\u1ebft vi\u1ec7c n\u00e0y ch\u1ec9 b\u1eb1ng m\u1ed9t file c\u1ea5u h\u00ecnh duy nh\u1ea5t. Thay v\u00ec g\u00f5 h\u00e0ng t\u00e1 l\u1ec7nh\u00a0<code>docker run<\/code> d\u00e0i d\u1eb1ng d\u1eb7c, b\u1ea1n ch\u1ec9 c\u1ea7n m\u1ed9t l\u1ec7nh \u0111\u1ec3 kh\u1edfi ch\u1ea1y to\u00e0n b\u1ed9 h\u1ec7 th\u1ed1ng.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-41351\" src=\"https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2026\/05\/Huong-dan-cai-Docker-Compose-tren-VPS-2.jpg\" alt=\"H\u01b0\u1edbng d\u1eabn c\u00e0i Docker Compose tr\u00ean VPS\" width=\"700\" height=\"467\" title=\"\" srcset=\"https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2026\/05\/Huong-dan-cai-Docker-Compose-tren-VPS-2.jpg 700w, https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2026\/05\/Huong-dan-cai-Docker-Compose-tren-VPS-2-300x200.jpg 300w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/p>\n<h2><span class=\"ez-toc-section\" id=\"1-Docker-Compose-la-gi-va-tai-sao-ban-can-no-tren-VPS\"><\/span>1. Docker Compose l\u00e0 g\u00ec v\u00e0 t\u1ea1i sao b\u1ea1n c\u1ea7n n\u00f3 tr\u00ean VPS?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><strong>Docker Compose<\/strong>\u00a0l\u00e0 c\u00f4ng c\u1ee5 gi\u00fap b\u1ea1n \u0111\u1ecbnh ngh\u0129a v\u00e0 v\u1eadn h\u00e0nh c\u00e1c \u1ee9ng d\u1ee5ng Docker g\u1ed3m nhi\u1ec1u container (multi-container) th\u00f4ng qua m\u1ed9t file c\u1ea5u h\u00ecnh \u0111\u1ecbnh d\u1ea1ng YAML duy nh\u1ea5t (th\u01b0\u1eddng l\u00e0\u00a0<code>docker-compose.yml<\/code>). Thay v\u00ec qu\u1ea3n l\u00fd ri\u00eang l\u1ebb, Docker Compose gi\u00fap kh\u1edfi ch\u1ea1y, thi\u1ebft l\u1eadp m\u1ea1ng li\u00ean k\u1ebft v\u00e0 qu\u1ea3n l\u00fd to\u00e0n b\u1ed9 h\u1ec7 th\u1ed1ng ch\u1ec9 b\u1eb1ng m\u1ed9t c\u00e2u l\u1ec7nh.<\/p>\n<p>\u0110\u1ec3 d\u1ec5 h\u00ecnh dung, h\u00e3y so s\u00e1nh hai c\u00e1ch tri\u1ec3n khai th\u1ef1c t\u1ebf:<\/p>\n<ul>\n<li><strong>Ch\u1ea1y b\u1eb1ng\u00a0<code>docker run<\/code>\u00a0th\u1ee7 c\u00f4ng:<\/strong>\u00a0B\u1ea1n ph\u1ea3i g\u00f5 c\u00e1c c\u00e2u l\u1ec7nh d\u00e0i lo\u1eb1ng ngo\u1eb1ng v\u1edbi \u0111\u1ea7y \u0111\u1ee7 tham s\u1ed1 port, volume, network. Ch\u1ec9 c\u1ea7n g\u00f5 sai m\u1ed9t k\u00fd t\u1ef1 l\u00e0 l\u1ed7i, v\u00e0 \u0111\u1eb7c bi\u1ec7t, khi VPS reboot, b\u1ea1n ph\u1ea3i nh\u1edb ch\u1ea1y l\u1ea1i ho\u1eb7c t\u1ef1 vi\u1ebft script kh\u1edfi \u0111\u1ed9ng.<\/li>\n<li><strong>Ch\u1ea1y b\u1eb1ng\u00a0<code>docker-compose up -d<\/code>:<\/strong>\u00a0To\u00e0n b\u1ed9 c\u1ea5u h\u00ecnh n\u1eb1m g\u1ecdn trong file YAML. Kh\u1edfi ch\u1ea1y, d\u1eebng, x\u00f3a b\u1ecf \u0111\u1ec1u ch\u1ec9 b\u1eb1ng m\u1ed9t l\u1ec7nh ng\u1eafn g\u1ecdn. Config r\u00f5 r\u00e0ng, d\u1ec5 d\u00e0ng backup v\u00e0 chia s\u1ebb cho team.<\/li>\n<\/ul>\n<p><strong>L\u01b0u \u00fd nh\u1ecf:<\/strong>\u00a0N\u1ebfu tr\u01b0\u1edbc \u0111\u00e2y b\u1ea1n quen v\u1edbi l\u1ec7nh\u00a0<code>docker-compose<\/code>\u00a0(c\u00f3 d\u1ea5u g\u1ea1ch ngang), \u0111\u00f3 l\u00e0 b\u1ea3n V1 \u0111\u00e3 b\u1ecb khai t\u1eed. B\u1ea3n V2 hi\u1ec7n t\u1ea1i b\u1ecf d\u1ea5u g\u1ea1ch ngang, ch\u1ea1y b\u1eb1ng l\u1ec7nh\u00a0<code>docker compose<\/code>\u00a0v\u1edbi hi\u1ec7u n\u0103ng t\u1ed1t h\u01a1n h\u1eb3n.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"2-Chuan-bi-nhung-gi-truoc-khi-cai-Docker-Compose-tren-VPS\"><\/span>2. Chu\u1ea9n b\u1ecb nh\u1eefng g\u00ec tr\u01b0\u1edbc khi c\u00e0i Docker Compose tr\u00ean VPS?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0110\u1ec3 c\u00e0i \u0111\u1eb7t Docker Compose th\u00e0nh c\u00f4ng, b\u1ea1n c\u1ea7n chu\u1ea9n b\u1ecb m\u1ed9t VPS ch\u1ea1y h\u1ec7 \u0111i\u1ec1u h\u00e0nh Linux (khuy\u00ean d\u00f9ng Ubuntu 22.04 LTS ho\u1eb7c 24.04 LTS), quy\u1ec1n truy c\u1eadp root ho\u1eb7c ng\u01b0\u1eddi d\u00f9ng c\u00f3 \u0111\u1eb7c quy\u1ec1n sudo, v\u00e0 m\u00e1y ch\u1ee7 \u0111\u00e3 \u0111\u01b0\u1ee3c c\u00e0i \u0111\u1eb7t s\u1eb5n Docker Engine.<\/p>\n<p>M\u1ed9t y\u1ebfu t\u1ed1 c\u1ef1c k\u1ef3 quan tr\u1ecdng nh\u01b0ng nhi\u1ec1u ng\u01b0\u1eddi hay b\u1ecf qua:\u00a0<strong>C\u00f4ng ngh\u1ec7 \u1ea3o h\u00f3a c\u1ee7a VPS<\/strong>. Docker c\u1ea7n \u1ea3o h\u00f3a t\u00e0i nguy\u00ean \u1edf m\u1ee9c kernel. N\u1ebfu VPS c\u1ee7a b\u1ea1n d\u00f9ng c\u00f4ng ngh\u1ec7 \u1ea3o h\u00f3a k\u00e9m (nh\u01b0 OpenVZ c\u0169), vi\u1ec7c ch\u1ea1y nhi\u1ec1u container s\u1ebd nhanh ch\u00f3ng d\u1eabn \u0111\u1ebfn ngh\u1ebdn CPU\/RAM v\u00e0 l\u1ed7i kh\u00f4ng th\u1ec3 kh\u1edfi \u0111\u1ed9ng.<\/p>\n<blockquote><p>N\u1ebfu b\u1ea1n ch\u01b0a c\u00f3 m\u00e1y ch\u1ee7 ho\u1eb7c VPS hi\u1ec7n t\u1ea1i qu\u00e1 y\u1ebfu, h\u00e3y n\u00e2ng c\u1ea5p ngay l\u00ean h\u1ec7 th\u1ed1ng VPS c\u1ee7a InterData. <a style=\"text-decoration: underline;\" href=\"https:\/\/interdata.vn\/thue-vps\/\" target=\"_blank\" rel=\"noopener\"><strong>VPS InterData<\/strong><\/a> s\u1edf h\u1eefu c\u00f4ng ngh\u1ec7 \u1ea3o h\u00f3a KVM ti\u00ean ti\u1ebfn, 100% \u1ed5 c\u1ee9ng NVMe chuy\u00ean d\u1ee5ng gi\u00fap t\u1ed1c \u0111\u1ed9 \u0111\u1ecdc ghi d\u1eef li\u1ec7u si\u00eau t\u1ed1c, c\u1ef1c k\u1ef3 ph\u00f9 h\u1ee3p \u0111\u1ec3 v\u1eadn h\u00e0nh c\u00e1c h\u1ec7 th\u1ed1ng Docker Container n\u1eb7ng m\u00e0 kh\u00f4ng lo gi\u1eadt lag.<\/p><\/blockquote>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-41349\" src=\"https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2026\/05\/Chuan-bi-truoc-khi-cai-Docker-Compose-tren-VPS.jpg\" alt=\"Chu\u1ea9n b\u1ecb tr\u01b0\u1edbc khi c\u00e0i Docker Compose tr\u00ean VPS\" width=\"700\" height=\"467\" title=\"\" srcset=\"https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2026\/05\/Chuan-bi-truoc-khi-cai-Docker-Compose-tren-VPS.jpg 700w, https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2026\/05\/Chuan-bi-truoc-khi-cai-Docker-Compose-tren-VPS-300x200.jpg 300w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/p>\n<h2><span class=\"ez-toc-section\" id=\"3-Huong-dan-cai-Docker-Compose-tren-VPS-Ubuntu-chi-tiet-Phien-ban-moi-nhat\"><\/span>3. H\u01b0\u1edbng d\u1eabn c\u00e0i Docker Compose tr\u00ean VPS Ubuntu chi ti\u1ebft (Phi\u00ean b\u1ea3n m\u1edbi nh\u1ea5t)<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>D\u01b0\u1edbi \u0111\u00e2y l\u00e0 c\u00e1c b\u01b0\u1edbc c\u00e0i \u0111\u1eb7t theo ph\u01b0\u01a1ng ph\u00e1p Docker APT Repository. \u0110\u00e2y l\u00e0 c\u00e1ch khuy\u00ean d\u00f9ng v\u00ec n\u00f3 gi\u00fap b\u1ea1n d\u1ec5 d\u00e0ng c\u1eadp nh\u1eadt l\u00ean b\u1ea3n m\u1edbi nh\u1ea5t ch\u1ec9 qua l\u1ec7nh\u00a0<code>apt upgrade<\/code>, thay v\u00ec ph\u1ea3i t\u1ea3i file nh\u1ecb ph\u00e2n th\u1ee7 c\u00f4ng b\u1eb1ng\u00a0<code>curl<\/code>\u00a0nh\u01b0 c\u00e1ch l\u00e0m c\u0169.<\/p>\n<p><strong>B\u01b0\u1edbc 1: C\u1eadp nh\u1eadt ch\u1ec9 m\u1ee5c g\u00f3i h\u1ec7 th\u1ed1ng<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo apt update &amp;&amp; sudo apt upgrade -y\r\n<\/code><\/pre>\n<p><strong>B\u01b0\u1edbc 2: C\u00e0i \u0111\u1eb7t c\u00e1c g\u00f3i h\u1ed7 tr\u1ee3 t\u1ea3i qua HTTPS<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo apt install apt-transport-https ca-certificates curl software-properties-common -y\r\n<\/code><\/pre>\n<p><strong>B\u01b0\u1edbc 3: Th\u00eam GPG Key ch\u00ednh th\u1ee9c c\u1ee7a Docker<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo install -m 0755 -d \/etc\/apt\/keyrings<\/code><\/pre>\n<pre><code class=\"language-bash\">curl -fsSL https:\/\/download.docker.com\/linux\/ubuntu\/gpg | sudo gpg --dearmor -o \/etc\/apt\/keyrings\/docker.gpg<\/code><\/pre>\n<pre><code class=\"language-bash\">sudo chmod a+r \/etc\/apt\/keyrings\/docker.gpg<\/code><\/pre>\n<p><strong>B\u01b0\u1edbc 4: Thi\u1ebft l\u1eadp Repository cho Docker<\/strong><\/p>\n<pre><code class=\"language-bash\">echo \\\r\n  \"deb [arch=$(dpkg --print-architecture) signed-by=\/etc\/apt\/keyrings\/docker.gpg] https:\/\/download.docker.com\/linux\/ubuntu \\\r\n  $(. \/etc\/os-release &amp;&amp; echo \"$VERSION_CODENAME\") stable\" | \\\r\n  sudo tee \/etc\/apt\/sources.list.d\/docker.list &gt; \/dev\/null\r\n<\/code><\/pre>\n<p><strong>B\u01b0\u1edbc 5: C\u00e0i \u0111\u1eb7t Docker Engine v\u00e0 Docker Compose Plugin<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo apt update<\/code><\/pre>\n<pre><code class=\"language-bash\">sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y\r\n<\/code><\/pre>\n<p><em>L\u01b0u \u00fd k\u1ef9 thu\u1eadt:<\/em>\u00a0C\u00e0i \u0111\u1eb7t qua g\u00f3i\u00a0<code>docker-compose-plugin<\/code>\u00a0s\u1ebd \u0111\u01b0a Docker Compose V2 v\u00e0o \u0111\u00fang th\u01b0 m\u1ee5c h\u1ec7 th\u1ed1ng c\u1ee7a Docker (<code>\/usr\/libexec\/docker\/cli-plugins\/<\/code>). Vi\u1ec7c n\u00e0y gi\u00fap tr\u00e1nh m\u1ecdi xung \u0111\u1ed9t ph\u00e2n quy\u1ec1n v\u00e0 c\u1eadp nh\u1eadt c\u1ef1c k\u1ef3 \u0111\u01a1n gi\u1ea3n sau n\u00e0y.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"4-Kiem-tra-cai-dat-va-chay-thu-du-an-dau-tien\"><\/span>4. Ki\u1ec3m tra c\u00e0i \u0111\u1eb7t v\u00e0 ch\u1ea1y th\u1eed d\u1ef1 \u00e1n \u0111\u1ea7u ti\u00ean<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Sau khi c\u00e0i xong, h\u00e3y x\u00e1c nh\u1eadn phi\u00ean b\u1ea3n b\u1eb1ng l\u1ec7nh:<\/p>\n<pre><code class=\"language-bash\">docker compose version\r\n<\/code><\/pre>\n<p>N\u1ebfu terminal tr\u1ea3 v\u1ec1 k\u1ebft qu\u1ea3 t\u01b0\u01a1ng t\u1ef1 nh\u01b0\u00a0<code>Docker Compose version vX.XX.X<\/code>\u00a0l\u00e0 b\u1ea1n \u0111\u00e3 th\u00e0nh c\u00f4ng.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-41353\" src=\"https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2026\/05\/Kiem-tra-phien-ban-Docker-Compose.png\" alt=\"Ki\u1ec3m tra phi\u00ean b\u1ea3n Docker Compose\" width=\"551\" height=\"99\" title=\"\" srcset=\"https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2026\/05\/Kiem-tra-phien-ban-Docker-Compose.png 551w, https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2026\/05\/Kiem-tra-phien-ban-Docker-Compose-300x54.png 300w\" sizes=\"auto, (max-width: 551px) 100vw, 551px\" \/><\/p>\n<p>B\u00e2y gi\u1edd, h\u00e3y th\u1eed deploy m\u1ed9t container Nginx \u0111\u01a1n gi\u1ea3n \u0111\u1ec3 xem m\u1ecdi th\u1ee9 ho\u1ea1t \u0111\u1ed9ng ra sao:<\/p>\n<ol>\n<li>T\u1ea1o th\u01b0 m\u1ee5c d\u1ef1 \u00e1n v\u00e0 di chuy\u1ec3n v\u00e0o:<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">mkdir nginx-test &amp;&amp; cd nginx-test\r\n<\/code><\/pre>\n<ol start=\"2\">\n<li>T\u1ea1o file c\u1ea5u h\u00ecnh:<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">nano docker-compose.yml\r\n<\/code><\/pre>\n<ol start=\"3\">\n<li>D\u00e1n n\u1ed9i dung sau v\u00e0o file (r\u1ea5t ng\u1eafn g\u1ecdn, chu\u1ea9n x\u00e1c):<\/li>\n<\/ol>\n<pre><code class=\"language-yaml\">services:\r\n  web:\r\n    image: nginx:alpine\r\n    ports:\r\n      - \"8080:80\"\r\n<\/code><\/pre>\n<ol start=\"4\">\n<li>Kh\u1edfi ch\u1ea1y \u1edf ch\u1ebf \u0111\u1ed9 ch\u1ea1y ng\u1ea7m (detached mode):<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">sudo docker compose up -d\r\n<\/code><\/pre>\n<p>M\u1edf tr\u00ecnh duy\u1ec7t v\u00e0 truy c\u1eadp v\u00e0o\u00a0<code>http:\/\/IP_VPS:8080<\/code>. N\u1ebfu th\u1ea5y trang ch\u00e0o m\u1eebng m\u1eb7c \u0111\u1ecbnh c\u1ee7a Nginx, h\u1ec7 th\u1ed1ng c\u1ee7a b\u1ea1n \u0111\u00e3 s\u1eb5n s\u00e0ng ho\u1ea1t \u0111\u1ed9ng!<\/p>\n<h2><span class=\"ez-toc-section\" id=\"5-Khac-phuc-nhanh-3-loi-thuong-gap-khi-dung-Docker-Compose-tren-VPS\"><\/span>5. Kh\u1eafc ph\u1ee5c nhanh 3 l\u1ed7i th\u01b0\u1eddng g\u1eb7p khi d\u00f9ng Docker Compose tr\u00ean VPS<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Trong qu\u00e1 tr\u00ecnh v\u1eadn h\u00e0nh th\u1ef1c t\u1ebf, c\u00f3 3 c\u00e1i &#8220;b\u1eaby&#8221; m\u00e0 h\u1ea7u nh\u01b0 ai c\u0169ng t\u1eebng v\u1ea5p ph\u1ea3i khi m\u1edbi c\u00e0i Docker Compose:<\/p>\n<p><strong>L\u1ed7i 1: Permission Denied (L\u1ed7i ph\u00e2n quy\u1ec1n khi ch\u1ea1y l\u1ec7nh kh\u00f4ng c\u00f3 sudo)<\/strong><\/p>\n<ul>\n<li><strong>L\u00fd do:<\/strong>\u00a0T\u00e0i kho\u1ea3n user hi\u1ec7n t\u1ea1i ch\u01b0a \u0111\u01b0\u1ee3c th\u00eam v\u00e0o group docker, n\u00ean h\u1ec7 th\u1ed1ng kh\u00f4ng c\u00f3 quy\u1ec1n truy c\u1eadp socket c\u1ee7a Docker.<\/li>\n<li><strong>C\u00e1ch x\u1eed l\u00fd nhanh:<\/strong><\/li>\n<\/ul>\n<p><code>sudo usermod -aG docker $USER<\/code><\/p>\n<p><code>newgrp docker<\/code><\/p>\n<p><em>(Sau khi ch\u1ea1y l\u1ec7nh, h\u00e3y \u0111\u0103ng xu\u1ea5t v\u00e0 \u0111\u0103ng nh\u1eadp l\u1ea1i \u0111\u1ec3 quy\u1ec1n c\u00f3 hi\u1ec7u l\u1ef1c).<\/em><\/p>\n<p><strong>L\u1ed7i 2: Command not found &#8220;docker-compose&#8221;<\/strong><\/p>\n<ul>\n<li><strong>L\u00fd do:<\/strong>\u00a0B\u1ea1n quen g\u00f5 l\u1ec7nh c\u00f3 d\u1ea5u g\u1ea1ch ngang c\u1ee7a V1, nh\u01b0ng h\u1ec7 th\u1ed1ng v\u1eeba c\u00e0i l\u00e0 V2 (d\u1ea1ng plugin).<\/li>\n<li><strong>C\u00e1ch x\u1eed l\u00fd:<\/strong>\u00a0H\u00e3y d\u00f9ng\u00a0<code>docker compose<\/code>\u00a0(d\u00f9ng kho\u1ea3ng tr\u1eafng thay v\u00ec g\u1ea1ch ngang). Trong tr\u01b0\u1eddng h\u1ee3p b\u1eaft bu\u1ed9c ph\u1ea3i d\u00f9ng l\u1ec7nh c\u0169 v\u00ec m\u1ed9t s\u1ed1 script c\u00f3 s\u1eb5n y\u00eau c\u1ea7u d\u1ea5u g\u1ea1ch ngang, b\u1ea1n c\u00f3 th\u1ec3 t\u1ea1o m\u1ed9t shortcut li\u00ean k\u1ebft:<\/li>\n<\/ul>\n<pre><code class=\"language-bash\">sudo ln -s \/usr\/libexec\/docker\/cli-plugins\/docker-compose \/usr\/local\/bin\/docker-compose\r\n<\/code><\/pre>\n<p><strong>L\u1ed7i 3: Port conflict (Tr\u00f9ng c\u1ed5ng k\u1ebft n\u1ed1i)<\/strong><\/p>\n<ul>\n<li><strong>L\u00fd do:<\/strong>\u00a0C\u1ed5ng b\u1ea1n khai b\u00e1o trong file c\u1ea5u h\u00ecnh (v\u00ed d\u1ee5 c\u1ed5ng 80 ho\u1eb7c 8080) \u0111\u00e3 b\u1ecb m\u1ed9t d\u1ecbch v\u1ee5 kh\u00e1c tr\u00ean VPS chi\u1ebfm d\u1ee5ng tr\u01b0\u1edbc \u0111\u00f3.<\/li>\n<li><strong>C\u00e1ch x\u1eed l\u00fd:<\/strong>\u00a0D\u00f9ng l\u1ec7nh\u00a0<code>sudo netstat -tulpn | grep :8080<\/code>\u00a0\u0111\u1ec3 t\u00ecm ra service \u0111ang chi\u1ebfm c\u1ed5ng v\u00e0 quy\u1ebft \u0111\u1ecbnh d\u1eebng n\u00f3, ho\u1eb7c \u0111\u1ed5i c\u1ed5ng b\u00ean tr\u00e1i trong ph\u1ea7n\u00a0<code>ports<\/code>\u00a0c\u1ee7a file\u00a0<code>docker-compose.yml<\/code>\u00a0th\u00e0nh m\u1ed9t c\u1ed5ng tr\u1ed1ng kh\u00e1c (v\u00ed d\u1ee5:\u00a0<code>\"8081:80\"<\/code>).<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"6-Cac-cau-hoi-thuong-gap-khi-cai-dat-Docker-Compose-tren-VPS-FAQ\"><\/span>6. C\u00e1c c\u00e2u h\u1ecfi th\u01b0\u1eddng g\u1eb7p khi c\u00e0i \u0111\u1eb7t Docker Compose tr\u00ean VPS (FAQ)<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"Q1-Co-nen-cai-Docker-Compose-bang-Snap-tren-Ubuntu-VPS-khong\"><\/span>Q1: C\u00f3 n\u00ean c\u00e0i Docker Compose b\u1eb1ng Snap tr\u00ean Ubuntu VPS kh\u00f4ng?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><strong>A:<\/strong>\u00a0B\u1ea1n\u00a0<strong>kh\u00f4ng n\u00ean<\/strong>\u00a0c\u00e0i Docker\/Docker Compose qua Snap tr\u00ean VPS. B\u1ea3n c\u00e0i \u0111\u1eb7t qua Snap ho\u1ea1t \u0111\u1ed9ng trong m\u00f4i tr\u01b0\u1eddng sandbox c\u00f4 l\u1eadp, th\u01b0\u1eddng g\u00e2y ra c\u00e1c l\u1ed7i nghi\u00eam tr\u1ecdng v\u1ec1 ph\u00e2n quy\u1ec1n h\u1ec7 th\u1ed1ng t\u1eadp tin, kh\u00f4ng \u0111\u1ecdc \u0111\u01b0\u1ee3c file c\u1ea5u h\u00ecnh ngo\u00e0i v\u00e0 kh\u00f3 kh\u0103n trong vi\u1ec7c k\u1ebft n\u1ed1i m\u1ea1ng n\u1ed9i b\u1ed9 gi\u1eefa c\u00e1c container. C\u00e1ch t\u1ed1t nh\u1ea5t lu\u00f4n l\u00e0 c\u00e0i qua APT Repository ch\u00ednh th\u1ee9c c\u1ee7a Docker.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Q2-Docker-Compose-V1-va-V2-khac-nhau-nhu-the-nao\"><\/span>Q2: Docker Compose V1 v\u00e0 V2 kh\u00e1c nhau nh\u01b0 th\u1ebf n\u00e0o?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><strong>A:<\/strong>\u00a0\u0110i\u1ec3m kh\u00e1c bi\u1ec7t l\u1edbn nh\u1ea5t l\u00e0 Docker Compose V1 \u0111\u01b0\u1ee3c vi\u1ebft b\u1eb1ng Python, ch\u1ea1y \u0111\u1ed9c l\u1eadp qua l\u1ec7nh\u00a0<code>docker-compose<\/code>\u00a0v\u00e0 hi\u1ec7n t\u1ea1i \u0111\u00e3 b\u1ecb Docker khai t\u1eed (deprecated). Docker Compose V2 \u0111\u01b0\u1ee3c vi\u1ebft b\u1eb1ng ng\u00f4n ng\u1eef Go, t\u00edch h\u1ee3p tr\u1ef1c ti\u1ebfp v\u00e0o Docker CLI nh\u01b0 m\u1ed9t plugin h\u1ec7 th\u1ed1ng v\u00e0 kh\u1edfi ch\u1ea1y b\u1eb1ng l\u1ec7nh\u00a0<code>docker compose<\/code>\u00a0(kh\u00f4ng c\u00f3 d\u1ea5u g\u1ea1ch ngang), mang l\u1ea1i t\u1ed1c \u0111\u1ed9 x\u1eed l\u00fd nhanh h\u01a1n v\u00e0 t\u00ednh b\u1ea3o m\u1eadt cao h\u01a1n.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Q3-Lam-the-nao-de-go-cai-dat-hoan-toan-Docker-Compose-khoi-VPS\"><\/span>Q3: L\u00e0m th\u1ebf n\u00e0o \u0111\u1ec3 g\u1ee1 c\u00e0i \u0111\u1eb7t ho\u00e0n to\u00e0n Docker Compose kh\u1ecfi VPS?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><strong>A:<\/strong>\u00a0N\u1ebfu c\u00e0i \u0111\u1eb7t d\u01b0\u1edbi d\u1ea1ng APT Plugin, b\u1ea1n ch\u1ec9 c\u1ea7n ch\u1ea1y l\u1ec7nh\u00a0<code>sudo apt purge docker-compose-plugin<\/code>\u00a0\u0111\u1ec3 g\u1ee1 b\u1ecf. \u0110\u1ed1i v\u1edbi c\u00e1c file c\u1ea5u h\u00ecnh v\u00e0 d\u1eef li\u1ec7u container c\u0169, b\u1ea1n c\u00f3 th\u1ec3 d\u1ecdn d\u1eb9p b\u1eb1ng l\u1ec7nh\u00a0<code>docker system prune -a --volumes<\/code>\u00a0tr\u01b0\u1edbc khi g\u1ee1 c\u00e0i \u0111\u1eb7t.<\/p>\n<hr \/>\n<p>Vi\u1ec7c thi\u1ebft l\u1eadp Docker Compose tr\u00ean VPS gi\u00fap t\u1ed1i \u01b0u h\u00f3a \u0111\u00e1ng k\u1ec3 quy tr\u00ecnh tri\u1ec3n khai v\u00e0 v\u1eadn h\u00e0nh \u1ee9ng d\u1ee5ng c\u1ee7a b\u1ea1n. Tuy nhi\u00ean, \u0111\u1ec3 Docker ho\u1ea1t \u0111\u1ed9ng m\u01b0\u1ee3t m\u00e0 v\u00e0 b\u1ec1n b\u1ec9 d\u01b0\u1edbi m\u1ecdi m\u1ee9c t\u1ea3i, b\u1ea1n c\u1ea7n m\u1ed9t n\u1ec1n t\u1ea3ng VPS c\u00f3 c\u1ea5u h\u00ecnh ph\u1ea7n c\u1ee9ng m\u1ea1nh m\u1ebd c\u00f9ng \u0111\u01b0\u1eddng truy\u1ec1n m\u1ea1ng trong n\u01b0\u1edbc \u1ed5n \u0111\u1ecbnh. \u0110\u1eebng ng\u1ea7n ng\u1ea1i li\u00ean h\u1ec7 v\u1edbi \u0111\u1ed9i ng\u0169 k\u1ef9 thu\u1eadt c\u1ee7a InterData \u0111\u1ec3 \u0111\u01b0\u1ee3c h\u1ed7 tr\u1ee3 t\u01b0 v\u1ea5n d\u00f2ng VPS chuy\u00ean d\u1ee5ng t\u1ed1i \u01b0u nh\u1ea5t cho Docker ngay h\u00f4m nay!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>B\u1ea1n v\u1eeba thu\u00ea m\u1ed9t VPS m\u1edbi v\u00e0 mu\u1ed1n ch\u1ea1y \u0111\u1ed3ng th\u1eddi c\u1ea3 Nginx, Node.js l\u1eabn MySQL nh\u01b0ng l\u01b0\u1eddi ph\u1ea3i c\u1ea5u h\u00ecnh th\u1ee7 c\u00f4ng t\u1eebng d\u1ecbch v\u1ee5? Docker Compose sinh ra \u0111\u1ec3 gi\u1ea3i quy\u1ebft vi\u1ec7c n\u00e0y ch\u1ec9 b\u1eb1ng m\u1ed9t file c\u1ea5u h\u00ecnh duy nh\u1ea5t. Thay v\u00ec g\u00f5 h\u00e0ng t\u00e1 l\u1ec7nh\u00a0docker run d\u00e0i d\u1eb1ng d\u1eb7c, b\u1ea1n ch\u1ec9<\/p>\n","protected":false},"author":2,"featured_media":41350,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[159,49],"tags":[],"class_list":["post-41344","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kien-thuc-docker","category-vps"],"_links":{"self":[{"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/posts\/41344","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/comments?post=41344"}],"version-history":[{"count":9,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/posts\/41344\/revisions"}],"predecessor-version":[{"id":41357,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/posts\/41344\/revisions\/41357"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/media\/41350"}],"wp:attachment":[{"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/media?parent=41344"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/categories?post=41344"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/tags?post=41344"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}