{"id":3237,"date":"2025-07-23T17:18:00","date_gmt":"2025-07-23T09:18:00","guid":{"rendered":"https:\/\/systw.net\/note\/?p=3237"},"modified":"2026-07-23T17:48:12","modified_gmt":"2026-07-23T09:48:12","slug":"docker-compose","status":"publish","type":"post","link":"https:\/\/systw.net\/note\/archives\/3237","title":{"rendered":"Docker Compose"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"> <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5982\u679c\u628a Docker Container \u6bd4\u55bb\u70ba\u300c\u6a02\u5668\u300d\uff0c\u90a3\u9ebc Docker Compose \u5c31\u662f\u300c\u6a02\u5718\u6307\u63ee\u300d\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u6c92\u6709 Docker Compose \u6642<\/strong>\uff1a\u5982\u679c\u4f60\u7684\u7db2\u7ad9\u9700\u8981\u7db2\u9801\u4f3a\u670d\u5668\uff08\u5982 Nginx\uff09\u3001\u5f8c\u7aef\u7a0b\u5f0f\uff08\u5982 Node.js\/Python\uff09\u8ddf\u8cc7\u6599\u5eab\uff08\u5982 MySQL\uff09\uff0c\u4f60\u5fc5\u9808\u624b\u52d5\u6572\u597d\u5e7e\u884c\u53c8\u9577\u53c8\u8907\u96dc\u7684 <code>docker run<\/code> \u6307\u4ee4\uff0c\u9084\u8981\u624b\u52d5\u5e6b\u5b83\u5011\u5efa\u7acb\u7db2\u8def\u3001\u639b\u8f09\u8cc7\u6599\u593e\u3002<\/li>\n\n\n\n<li><strong>\u6709\u4e86 Docker Compose \u5f8c<\/strong>\uff1a\u4f60\u53ea\u9700\u8981\u5beb\u4e00\u4efd\u540d\u70ba <code>docker-compose.yml<\/code> \u7684\u8a2d\u5b9a\u6a94\uff0c\u628a\u6240\u6709\u5bb9\u5668\u7684\u898f\u683c\u5beb\u6e05\u695a\uff0c\u63a5\u8457\u53ea\u9700\u8981\u57f7\u884c <strong>\u4e00\u884c\u6307\u4ee4<\/strong>\uff0c\u5c31\u80fd\u540c\u6642\u555f\u52d5\u6216\u95dc\u9589\u6240\u6709\u670d\u52d9\uff01<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u6838\u5fc3\u6982\u5ff5\uff1a\u4e00\u500b\u6a94\u6848\u3001\u5169\u500b\u6307\u4ee4<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5b78\u7fd2 Docker Compose\uff0c\u53ea\u8981\u638c\u63e1\u4ee5\u4e0b\u6838\u5fc3\u67b6\u69cb\uff1a<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><code>docker-compose.yml<\/code> \u8a2d\u5b9a\u6a94\uff1a\u7528 YAML \u683c\u5f0f\u7de8\u5beb\uff0c\u7528\u4f86\u5b9a\u7fa9\u6709\u54ea\u4e9b\u5bb9\u5668\uff08Services\uff09\u3001\u7db2\u8def\uff08Networks\uff09\u8207\u8cc7\u6599\u5377\uff08Volumes\uff09\u3002<\/li>\n\n\n\n<li><strong><code>docker compose up<\/code><\/strong>\uff1a\u4e00\u9375\u6253\u5305\u555f\u52d5\u6240\u6709\u5bb9\u5668\u3002<\/li>\n\n\n\n<li><strong><code>docker compose down<\/code><\/strong>\uff1a\u4e00\u9375\u505c\u6b62\u4e26\u6e05\u9664\u6240\u6709\u5bb9\u5668\u3002<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-dots\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u5feb\u901f\u5be6\u6230\uff1a\u5efa\u7acb\u7b2c\u4e00\u500b Compose \u5c08\u6848<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u4ee5\u4e0b\u5efa\u7acb\u4e00\u500b\u6975\u7c21\u7684\u7bc4\u4f8b\uff1a\u7528 Docker Compose \u4e00\u8d77\u555f\u52d5 Nginx \u7db2\u9801\u4f3a\u670d\u5668 \u8207 Redis \u5feb\u53d6\u8cc7\u6599\u5eab\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u7b2c\u4e00\u6b65\uff1a\u5efa\u7acb\u5c08\u6848\u8cc7\u6599\u593e<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728\u7d42\u7aef\u6a5f\uff08Terminal\uff09\u6216 Command Prompt \u5efa\u7acb\u4e00\u500b\u65b0\u8cc7\u6599\u593e\u4e26\u9032\u5165\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mkdir my-compose-demo\ncd my-compose-demo\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u7b2c\u4e8c\u6b65\uff1a\u5efa\u7acb <code>docker-compose.yml<\/code><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728\u8a72\u8cc7\u6599\u593e\u5167\u5efa\u7acb\u4e00\u500b\u540d\u70ba <code>docker-compose.yml<\/code> \u7684\u6a94\u6848\uff0c\u8cbc\u5165\u4ee5\u4e0b\u5167\u5bb9\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>version: '3.8'\n\nservices:\n  webserver:\n    image: nginx:alpine\n    container_name: my-web-server\n    ports:\n      - \"8080:80\"\n    restart: always\n\n  cache:\n    image: redis:alpine\n    container_name: my-redis-cache\n    restart: always\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">\u95dc\u9375\u6b04\u4f4d\u89e3\u6790\uff1a<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>version<\/code><\/strong>\uff1a\u5b9a\u7fa9 Docker Compose \u7684\u8a9e\u6cd5\u7248\u672c\uff08\u4e00\u822c\u7dad\u6301 <code>'3.8'<\/code> \u5373\u53ef\uff09\u3002<\/li>\n\n\n\n<li><strong><code>services<\/code><\/strong>\uff1a\u5e95\u4e0b\u5b9a\u7fa9\u4f60\u8981\u555f\u52d5\u7684\u5404\u500b\u5bb9\u5668\u3002\n<ul class=\"wp-block-list\">\n<li>webserver\uff1a \u670d\u52d9 1\uff1a\u7db2\u9801\u4f3a\u670d\u5668<\/li>\n\n\n\n<li>cache\uff1a\u670d\u52d9 2\uff1aRedis \u8cc7\u6599\u5eab<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong><code>image<\/code><\/strong>\uff1a\u6307\u5b9a\u4f7f\u7528\u7684 Docker Image \u6620\u50cf\u6a94\u540d\u7a31\uff08\u9019\u88e1\u9078\u7528\u8f15\u91cf\u5316\u7684 <code>alpine<\/code> \u7248\u672c\uff09\u3002<\/li>\n\n\n\n<li><strong><code>ports<\/code><\/strong>\uff1a\u9023\u63a5\u57e0\u5c0d\u6620\uff0c\u683c\u5f0f\u70ba <code>\"\u4e3b\u6a5f Port : \u5bb9\u5668\u5167 Port\"<\/code>\u3002\u9019\u88e1\u4ee3\u8868\u5b58\u53d6\u96fb\u8166\u7684 <code>8080<\/code> Port \u6703\u5c0d\u61c9\u5230 Nginx \u7684 <code>80<\/code> Port\u3002<\/li>\n\n\n\n<li><strong><code>restart: always<\/code><\/strong>\uff1a\u8a2d\u5b9a\u7576\u5bb9\u5668\u610f\u5916\u5d29\u6f70\u6642\u6703\u81ea\u52d5\u91cd\u555f\u3002<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u7b2c\u4e09\u6b65\uff1a\u555f\u52d5\u670d\u52d9<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728 <code>docker-compose.yml<\/code> \u6240\u5728\u7684\u8cc7\u6599\u593e\u4e2d\uff0c\u57f7\u884c\u4ee5\u4e0b\u6307\u4ee4\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker compose up -d<\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>\u5c0f\u6280\u5de7<\/strong>\uff1a<code>-d<\/code> \u4ee3\u8868\u5728\u80cc\u666f\u57f7\u884c\uff08Detached mode\uff09\uff0c\u9019\u6a23\u7d42\u7aef\u6a5f\u5c31\u4e0d\u6703\u88ab Log \u8a0a\u606f\u4f54\u7528\u3002<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">\u6253\u958b\u700f\u89bd\u5668\u8f38\u5165 <code>http:\/\/localhost:8080<\/code>\uff0c\u5982\u679c\u4f60\u770b\u5230 Nginx \u7684 <strong>&#8220;Welcome to nginx!&#8221;<\/strong> \u756b\u9762\uff0c\u5c31\u4ee3\u8868\u670d\u52d9\u6210\u529f\u555f\u52d5\u4e86\uff01<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-dots\"\/>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u5e38\u7528\u6307\u4ee4 <\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u5b78\u6703\u9019\u5e7e\u884c\u6307\u4ee4\uff0c\u5c31\u80fd\u61c9\u4ed8 90% \u7684\u65e5\u5e38\u64cd\u4f5c\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>1.\u80cc\u666f\u555f\u52d5\u6240\u6709\u670d\u52d9\uff1a<\/strong><code>docker compose up -d<\/code>\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6839\u64da <code>docker-compose.yml<\/code> \u7684\u8a2d\u5b9a\uff0c\u4e0b\u8f09\u6620\u50cf\u6a94\u4e26\u5728\u80cc\u666f\u555f\u52d5\u6240\u6709\u5bb9\u5668\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>2.\u67e5\u770b\u904b\u4f5c\u4e2d\u7684\u670d\u52d9\uff1a<\/strong><code>docker compose ps<\/code>\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5217\u51fa\u76ee\u524d\u7531 Compose \u7ba1\u7406\u7684\u6240\u6709\u5bb9\u5668\u72c0\u614b\u3001\u57e0\u865f\u5c0d\u6620\u8207\u904b\u4f5c\u60c5\u5f62\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>3.\u5373\u6642\u67e5\u770b\u5bb9\u5668 Log\uff1a<\/strong><code>docker compose logs -f<\/code>\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6301\u7e8c\u5370\u51fa\u6240\u6709\u5bb9\u5668\u7684\u65e5\u8a8c\u7d00\u9304\u3002\u82e5\u53ea\u60f3\u770b\u55ae\u4e00\u670d\u52d9\uff0c\u53ef\u5728\u5f8c\u65b9\u6307\u5b9a\u540d\u7a31\uff0c\u4f8b\u5982 <code>docker compose logs -f webserver<\/code>\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>4.\u505c\u6b62\u4e26\u522a\u9664\u5bb9\u5668\uff1a<\/strong><code>docker compose down<\/code>\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5b89\u5168\u505c\u6b62\u6240\u6709\u5bb9\u5668\uff0c\u4e26\u91cb\u653e\u5b83\u5011\u6240\u4f54\u7528\u7684\u7db2\u8def\u74b0\u5883\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-dots\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u6ce8\u610f\u4e8b\u9805<\/h2>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>1. YAML \u7e2e\u6392\u683c\u5f0f\u8981\u6c42\u6975\u70ba\u56b4\u683c<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">YAML \u6a94\u6848\u56b4\u7981\u4f7f\u7528 Tab \u9375\uff0c\u53ea\u80fd\u4f7f\u7528**\u7a7a\u767d\u9375\uff08Space\uff09**\u9032\u884c\u7e2e\u6392\uff01\u5982\u679c\u4e0d\u5c0f\u5fc3\u6df7\u7528\uff0cDocker Compose \u8b80\u53d6\u6642\u6703\u76f4\u63a5\u5831\u932f\u3002<\/p>\n<\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>2. \u5bb9\u5668\u9593\u7684\u901a\u8a0a\u6975\u5ea6\u7c21\u55ae<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728\u540c\u4e00\u4efd <code>docker-compose.yml<\/code> \u5e95\u4e0b\u7684\u5bb9\u5668\uff0c\u9810\u8a2d\u6703\u81ea\u52d5\u9023\u5230\u540c\u4e00\u500b\u865b\u64ec\u7db2\u8def\u4e2d\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u91cd\u9ede\uff1a \u5bb9\u5668\u4e4b\u9593\u8981\u4e92\u76f8\u9023\u7dda\u6642\uff0c\u4e3b\u6a5f\u540d\u7a31\u76f4\u63a5\u5beb\u300c\u670d\u52d9\u540d\u7a31\uff08Service Name\uff09\u300d\u5373\u53ef\uff01\u4f8b\u5982\u5f8c\u7aef\u7a0b\u5f0f\u8981\u9023 Redis\uff0c\u9023\u7dda\u5730\u5740\u76f4\u63a5\u586b <code>cache:6379<\/code>\uff0c\u4e0d\u9700\u8981\u5beb IP\u3002<\/p>\n<\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>3. \u8cc7\u6599\u6301\u4e45\u5316\uff08Volumes\uff09<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u9810\u8a2d\u60c5\u6cc1\u4e0b\uff0c\u7576\u5bb9\u5668\u88ab <code>docker compose down<\/code> \u522a\u9664\u6642\uff0c\u5bb9\u5668\u88e1\u7522\u751f\u7684\u65b0\u8cc7\u6599\u4e5f\u6703\u8ddf\u8457\u6d88\u5931\u3002\u5982\u679c\u9700\u8981\u4fdd\u7559\u8cc7\u6599\uff08\u5982\u8cc7\u6599\u5eab\u6a94\u6848\uff09\uff0c\u8a18\u5f97\u52a0\u4e0a <code>volumes<\/code> \u8a2d\u5b9a\u5c07\u8cc7\u6599\u5c0d\u6620\u56de\u5be6\u9ad4\u96fb\u8166\u4e2d\u3002<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-dots\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u5e38\u7528\u95dc\u9375\u5c6c\u6027\u8a9e\u6cd5\u89e3\u6790<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728\u5beb <code>docker-compose.yml<\/code> \u6642\uff0c\u4f60\u6703\u7d93\u5e38\u770b\u5230\u4ee5\u4e0b 10 \u500b\u6838\u5fc3\u5c6c\u6027\uff1a<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. <code>environment<\/code> (\u74b0\u5883\u8b8a\u6578)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u7528\u4f86\u6ce8\u5165\u8b8a\u6578\u5230\u5bb9\u5668\u5167\uff0c\u5e38\u898b\u65bc\u8a2d\u5b9a\u8cc7\u6599\u5eab\u5e33\u5bc6\u3001\u7cfb\u7d71\u6642\u5340\u6216 API \u91d1\u9470\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>environment:\n  POSTGRES_USER: root\n  POSTGRES_PASSWORD: mysecretpassword<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2. <code>volumes<\/code> (\u8cc7\u6599\u6301\u4e45\u5316\u8207\u76ee\u9304\u5c0d\u6620)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5bb9\u5668\u522a\u9664\u5f8c\u5167\u90e8\u7684\u8cc7\u6599\u4e5f\u6703\u8ddf\u8457\u6d88\u5931\u3002<code>volumes<\/code> \u80fd\u628a\u4e3b\u6a5f\uff08Host\uff09\u7684\u8cc7\u6599\u593e\u5c0d\u6620\u9032\u5bb9\u5668\u5167\uff0c\u78ba\u4fdd\u8cc7\u6599\u4fdd\u7559\u4e0b\u4f86\u6216\u7528\u4f86\u540c\u6b65\u7a0b\u5f0f\u78bc\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4ee5\u4e0b\u662f\u5c07\u4e3b\u6a5f\u7576\u524d\u7684html \u5c0d\u6620\u5230\u5bb9\u5668\u5167\/usr\/share\/nginx\/html<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>volumes:\n  - .\/html:\/usr\/share\/nginx\/html  <\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3. <code>build<\/code> (\u81ea\u8a02 Image \u7de8\u8b6f)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u7576\u5b98\u65b9\u6c92\u6709\u73fe\u6210\u7684\u6620\u50cf\u6a94\uff0c\u9700\u8981\u900f\u904e\u672c\u5730\u7684 <code>Dockerfile<\/code> \u81ea\u5df1\u5efa\u7acb Image \u6642\u4f7f\u7528\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4ee5\u4e0b\u7528 . \u8868\u793a Dockerfile \u5728\u7576\u524d\u6240\u5728\u76ee\u9304\u8def\u5f91<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>build: . <\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">4. <code>depends_on<\/code> (\u555f\u52d5\u9806\u5e8f\u63a7\u5236)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u6307\u5b9a\u5bb9\u5668\u9593\u7684\u555f\u52d5\u9806\u5e8f\u3002\u4ee5\u4e0b\u8868\u793a\u5fc5\u9808\u5148\u555f\u52d5db\u8cc7\u6599\u5eab\uff0c\u624d\u80fd\u555f\u52d5\u8a72\u670d\u52d9\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>depends_on:\n  - db  <\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">5. <code>network_mode<\/code> (\u7db2\u8def\u6a21\u5f0f)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u6539\u8b8a\u5bb9\u5668\u7684\u7db2\u8def\u9023\u63a5\u67b6\u69cb\u3002\u5e38\u898b\u7684\u503c\u6709 <code>bridge<\/code>\uff08\u9810\u8a2d\u865b\u64ec\u7db2\u8def\uff09\u8207 <code>host<\/code>\uff08\u76f4\u63a5\u5171\u7528\u4e3b\u6a5f\u7db2\u8def\uff09\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>network_mode: \"host\"  <\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">6. <code>dns<\/code> (\u81ea\u8a02 DNS \u4f3a\u670d\u5668)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u6307\u5b9a\u5bb9\u5668\u5167\u90e8\u7684 DNS \u89e3\u6790\u4f3a\u670d\u5668\u3002\u82e5\u9810\u8a2d DNS \u7121\u6cd5\u89e3\u6790\u5916\u7db2\uff0c\u53ef\u81ea\u8a02 Google (<code>8.8.8.8<\/code>) \u6216 Cloudflare (<code>1.1.1.1<\/code>)\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>dns:\n  - 8.8.8.8<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">7. <code>cap_add<\/code> (\u65b0\u589e Linux \u7cfb\u7d71\u6b0a\u9650)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Docker \u9810\u8a2d\u6703\u5c01\u9396\u8a31\u591a\u654f\u611f\u7684\u6b0a\u9650\uff0c\u900f\u904e <code>cap_add<\/code> \u53ef\u4ee5\u7cbe\u6e96\u89e3\u9396\u7279\u5b9a\u7cfb\u7d71\u6b0a\u9650\uff08\u4f8b\u5982\u7db2\u8def\u5c01\u5305\u4fee\u6539\uff09\u3002 \u4ee5\u4e0b\u662f\u958b\u767c\u8207\u71df\u904b\u4e2d\u6700\u5e38\u770b\u5230\u7684\u5e7e\u500b\u9078\u9805\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><td><strong>\u9078\u9805\u540d\u7a31<\/strong><\/td><td><strong>\u5141\u8a31\u5bb9\u5668\u505a\u7684\u4e8b<\/strong><\/td><td><strong>\u5e38\u898b\u4f7f\u7528\u60c5\u5883<\/strong><\/td><\/tr><\/thead><tbody><tr><td><strong><code>NET_ADMIN<\/code><\/strong><\/td><td>\u4fee\u6539\u7db2\u8def\u4ecb\u9762\u3001\u9632\u706b\u7246\u898f\u5247\uff08iptables\uff09\u3001\u8def\u7531\u8868<\/td><td>VPN \u7528\u6236\u7aef\/\u4f3a\u670d\u5668\u3001\u6d41\u91cf\u76e3\u63a7\u5de5\u5177<\/td><\/tr><tr><td><strong><code>NET_RAW<\/code><\/strong><\/td><td>\u767c\u9001\u539f\u59cb\u5c01\u5305\uff08Raw Sockets\uff09<\/td><td>\u5728\u5bb9\u5668\u5167\u57f7\u884c <code>ping<\/code> \u6307\u4ee4\u3001Wireshark \u6293\u5305<\/td><\/tr><tr><td><strong><code>SYS_PTRACE<\/code><\/strong><\/td><td>\u8ffd\u8e64\u8207\u5075\u932f\u5176\u4ed6\u7a0b\u5e8f\uff08Process\uff09<\/td><td>\u4f7f\u7528 <code>gdb<\/code> \u9664\u932f\u3001\u6548\u80fd\u5206\u6790\u5de5\u5177\uff08\u5982 <code>strace<\/code>\uff09<\/td><\/tr><tr><td><strong><code>SYS_TIME<\/code><\/strong><\/td><td>\u4fee\u6539\u7cfb\u7d71\u7684\u6642\u9418\u8207\u6642\u9593<\/td><td>NTP \u6642\u9593\u540c\u6b65\u670d\u52d9<\/td><\/tr><tr><td><strong><code>SYS_ADMIN<\/code><\/strong><\/td><td>\u57f7\u884c\u5404\u7a2e\u7cfb\u7d71\u7ba1\u7406\u64cd\u4f5c\uff08\u63a5\u8fd1\u534a\u500b root\uff09<\/td><td>\u639b\u8f09\u6a94\u6848\u7cfb\u7d71\uff08<code>mount<\/code>\uff09\u3001\u5bb9\u5668\u5167\u57f7\u884c FUSE \u6a94\u6848\u7cfb\u7d71<\/td><\/tr><tr><td><strong><code>DAC_READ_SEARCH<\/code><\/strong><\/td><td>\u7e5e\u904e\u6a94\u6848\u6b0a\u9650\u6aa2\u67e5\u76f4\u63a5\u8b80\u53d6\u6240\u6709\u6a94\u6848<\/td><td>\u6a94\u6848\u5099\u4efd\u5de5\u5177\u3001\u7cfb\u7d71\u5b89\u5168\u6383\u63cf\u5668<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>cap_add:\n  - NET_ADMIN  <\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">8. <code>privileged<\/code> (\u6700\u9ad8\u7279\u6b0a\u6a21\u5f0f)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5c07\u5bb9\u5668\u8ce6\u4e88\u63a5\u8fd1\u5be6\u9ad4\u4e3b\u6a5f Root \u7684\u6700\u9ad8\u6b0a\u9650\u3002\u5e38\u7528\u65bc Docker-in-Docker \u6216\u5b58\u53d6\u5be6\u9ad4\u786c\u9ad4\u8a2d\u5099<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>privileged: true <\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>\u6ce8\u610f\u4e8b\u9805<\/strong>\uff1a\u958b\u555f <code>privileged: true<\/code> \u6703\u5927\u5e45\u589e\u52a0\u5bb9\u5668\u9003\u9038\u7684\u98a8\u96aa\uff0c\u975e\u7279\u6b8a\u9700\u6c42\u5207\u52ff\u5728\u751f\u7522\u74b0\u5883\u958b\u555f\uff01<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">9. <code>entrypoint<\/code> (\u8986\u84cb\u9810\u8a2d\u555f\u52d5\u6307\u4ee4)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5f37\u5236\u8986\u84cb\u5bb9\u5668\u555f\u52d5\u6642\u8981\u57f7\u884c\u7684\u7b2c\u4e00\u500b\u6838\u5fc3\u6307\u4ee4\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>entrypoint: &#91;\"python\", \"app.py\"]  <\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">10. <code>sysctls<\/code> (\u4fee\u6539 Linux \u6838\u5fc3\u53c3\u6578)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u7528\u4f86\u8abf\u6574\u5bb9\u5668\u5167\u90e8\u7684 Linux Kernel \u53c3\u6578\uff0c\u5e38\u898b\u65bc\u9ad8\u4f75\u767c\u6548\u80fd\u8abf\u512a\u3002\u4ee5\u4e0b\u4e3b\u8981\u63d0\u9ad8\u6700\u5927\u7db2\u8def\u9023\u7dda\u4f47\u5217\u6578<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sysctls:\n  net.core.somaxconn: 1024 <\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-dots\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u5be6\u6230\u7bc4\u4f8b\uff1a\u5b8c\u6574 docker-compose.yml<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u6211\u5011\u5c07\u4e0a\u8ff0 10 \u500b\u5c6c\u6027\u6574\u5408\u9032\u4e00\u500b\u5305\u542b Python Web\u3001Redis Cache\u8207 Network Agent \u7684\u67b6\u69cb\u4e2d\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>version: '3.8'\n\nservices:\n  # 1. Python Web\n  web:\n    build: .                           \n    container_name: my-web-app\n    ports:\n      - \"5000:5000\"\n    environment:                       \n      - PORT=5000\n      - REDIS_HOST=cache\n    volumes:                           \n      - .:\/app\n    depends_on:                         \n      - cache\n    entrypoint: &#91;\"python\", \"app.py\"]   \n    sysctls:                           \n      net.core.somaxconn: 1024\n\n  # 2. Redis Cache \n  cache:\n    image: redis:7-alpine\n    container_name: my-redis\n    dns:                               \n      - 8.8.8.8\n      - 1.1.1.1\n\n  # 3. Network Agent \n  net-tools:\n    image: alpine\n    container_name: my-net-tools\n    network_mode: \"host\"               \n    cap_add:                           \n      - NET_ADMIN\n    # privileged: true                 \n    command: sleep infinity<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5982\u679c\u628a Docker Container \u6bd4\u55bb\u70ba\u300c\u6a02\u5668\u300d\uff0c\u90a3\u9ebc Docker Compose \u5c31\u662f\u300c\u6a02\u5718\u6307\u63ee\u300d\u3002<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[19],"tags":[],"class_list":["post-3237","post","type-post","status-publish","format-standard","hentry","category-linuxsystem"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack-related-posts":[{"id":3234,"url":"https:\/\/systw.net\/note\/archives\/3234","url_meta":{"origin":3237,"position":0},"title":"Dockerfile","author":"raymond","date":"2025 \u5e74 7 \u6708 23 \u65e5","format":false,"excerpt":"Dockerfile \u662f\u7528\u4f86\u81ea\u52d5\u5316\u5efa\u7f6e Docker \u6620\u50cf\u6a94\uff08Image\uff09\u7684\u7d14\u6587\u5b57\u8aaa\u660e\u66f8","rel":"","context":"\u5728\u300cLinux\u7cfb\u7d71\u300d\u4e2d","block_context":{"text":"Linux\u7cfb\u7d71","link":"https:\/\/systw.net\/note\/archives\/category\/system\/linuxsystem"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1666,"url":"https:\/\/systw.net\/note\/archives\/1666","url_meta":{"origin":3237,"position":1},"title":"Docker","author":"raymond","date":"2023 \u5e74 8 \u6708 27 \u65e5","format":false,"excerpt":"Docker\u662f\u8f15\u91cf\u7d1a\u7684\u865b\u64ec\u5316\u89e3\u6c7a\u65b9\u6848\uff0c\u4f7f\u7528container\u7684\u6280\u8853\uff0c\u985e\u4f3c\u865b\u64ec\u6a5f\u6280\u8853\uff0c\u4f46\u4e0d\u7528\u50cf\u865b\u64ec\u6a5f\u5728\u2026","rel":"","context":"\u5728\u300cLinux\u7cfb\u7d71\u300d\u4e2d","block_context":{"text":"Linux\u7cfb\u7d71","link":"https:\/\/systw.net\/note\/archives\/category\/system\/linuxsystem"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":660,"url":"https:\/\/systw.net\/note\/archives\/660","url_meta":{"origin":3237,"position":2},"title":"03\u64cd\u4f5clinux","author":"raymond","date":"2007 \u5e74 10 \u6708 14 \u65e5","format":false,"excerpt":"\u770b\u5b8c\u672c\u7ae0\u5f8c\u4f60\u5fc5\u9808\u6703\u4f7f\u7528\u4ee5\u4e0b\u6700\u57fa\u672c\u7684\u547d\u4ee4passwd\u3000\u3000\u8a2d\u5b9a\u5bc6\u78bcpwd\u3000\u3000\u76ee\u524d\u6240\u5728\u76ee\u9304cd \u8def\u5f91\u3000\u3000\u5230\u2026","rel":"","context":"\u5728\u300cLinux\u7cfb\u7d71\u300d\u4e2d","block_context":{"text":"Linux\u7cfb\u7d71","link":"https:\/\/systw.net\/note\/archives\/category\/system\/linuxsystem"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":547,"url":"https:\/\/systw.net\/note\/archives\/547","url_meta":{"origin":3237,"position":3},"title":"PHP\u8d85\u5165\u9580\u65b0\u624b\u5c08\u7528","author":"raymond","date":"2007 \u5e74 10 \u6708 14 \u65e5","format":false,"excerpt":"\u5efa\u8b70\u95b1\u8b80\u7a0b\u5ea6:\u5b8c\u5168\u4e0d\u77e5\u9053php\u9019\u73a9\u610f\u6216\u60f3\u5b78php\u4f46\u7121\u5f9e\u4e0b\u624b \u524d\u8a00\u3000\u3000\u5728\u9032\u5165\u6b63\u984c\u4e4b\u524d\u5462~\u6211\u5011\u5148\u4f86\u54c8\u5566\u4e00\u2026","rel":"","context":"\u5728\u300c\u958b\u767c\u300d\u4e2d","block_context":{"text":"\u958b\u767c","link":"https:\/\/systw.net\/note\/archives\/category\/develop"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":664,"url":"https:\/\/systw.net\/note\/archives\/664","url_meta":{"origin":3237,"position":4},"title":"01\u8a8d\u8b58linux","author":"raymond","date":"2007 \u5e74 10 \u6708 14 \u65e5","format":false,"excerpt":"\u7c21\u55ae\u4ecb\u7d39Linux\u662f\u4e00\u5957\u4f5c\u696d\u7cfb\u7d71\uff0c\u4ec0\u9ebc\u662f\u4f5c\u696d\u7cfb\u7d71\u5462\uff1f\u7c21\u55ae\u4f86\u8aaa\u50cf \u662f\u5927\u5bb6\u8033\u719f\u80fd\u8a73\u7684windows XP\u2026","rel":"","context":"\u5728\u300cLinux\u7cfb\u7d71\u300d\u4e2d","block_context":{"text":"Linux\u7cfb\u7d71","link":"https:\/\/systw.net\/note\/archives\/category\/system\/linuxsystem"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":2553,"url":"https:\/\/systw.net\/note\/archives\/2553","url_meta":{"origin":3237,"position":5},"title":"\u5340\u584a\u93c8\u6280\u8853\u67b6\u69cb","author":"raymond","date":"2024 \u5e74 8 \u6708 10 \u65e5","format":false,"excerpt":"\u5340\u584a\u93c8\u7cfb\u7d71\u904b\u4f5c\u7684\u6574\u9ad4\u6280\u8853\u6846\u67b6\uff0c\u5c31\u50cf\u4e00\u68df\u5927\u6a13\u7684\u8a2d\u8a08\u85cd\u5716\uff0c\u5b9a\u7fa9\u4e86\u5f9e\u5730\u57fa\u5230\u9802\u6a13\u7684\u6bcf\u500b\u90e8\u5206\u5982\u4f55\u904b\u4f5c\u548c\u76f8\u4e92\u5354\u4f5c\u2026","rel":"","context":"\u5728\u300cBlockChain\u300d\u4e2d","block_context":{"text":"BlockChain","link":"https:\/\/systw.net\/note\/archives\/category\/%e5%8d%80%e5%a1%8a%e9%8f%88\/blockchain"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/posts\/3237","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/comments?post=3237"}],"version-history":[{"count":2,"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/posts\/3237\/revisions"}],"predecessor-version":[{"id":3240,"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/posts\/3237\/revisions\/3240"}],"wp:attachment":[{"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/media?parent=3237"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/categories?post=3237"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/tags?post=3237"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}