{"id":6437,"date":"2023-02-08T10:25:20","date_gmt":"2023-02-08T02:25:20","guid":{"rendered":"https:\/\/i007.vip:15443\/wordpress\/?p=6437"},"modified":"2023-02-08T10:25:20","modified_gmt":"2023-02-08T02:25:20","slug":"%e5%9c%a8-vs-code-%e4%b8%ad%e4%bd%bf%e7%94%a8%e5%ae%b9%e5%99%a8%e5%bc%80%e5%8f%91","status":"publish","type":"post","link":"https:\/\/i007.cc\/wordpress\/archives\/6437","title":{"rendered":"\u5728 VS Code \u4e2d\u4f7f\u7528\u5bb9\u5668\u5f00\u53d1"},"content":{"rendered":"<header class=\"Post-Header\">\n<p class=\"Post-Title\"><a href=\"https:\/\/zhuanlan.zhihu.com\/p\/88565144\">\u539f\u6587\u5730\u5740<\/a><\/p>\n<p>\u00a0<\/p>\n<div class=\"Post-Author\">\n<div class=\"AuthorInfo\">\n<div class=\"AuthorInfo\">\n<div class=\"css-1gomreu\"><a class=\"UserLink-link\" href=\"https:\/\/www.zhihu.com\/people\/shuai-qi-mao-mi-11\" target=\"_blank\" rel=\"noopener\" data-za-detail-view-element_name=\"User\"><img decoding=\"async\" class=\"Avatar AuthorInfo-avatar css-1y9jkzv\" src=\"https:\/\/picx.zhimg.com\/v2-e30bfe513c00ca24452658f6c0d71f01_l.jpg?source=172ae18b\" srcset=\"https:\/\/picx.zhimg.com\/v2-e30bfe513c00ca24452658f6c0d71f01_l.jpg?source=172ae18b 2x\" alt=\"\u5e05\u6c14\u732b\u54aa\" \/><\/a><\/div>\n<div class=\"AuthorInfo-content\">\n<div class=\"AuthorInfo-head\">\n<div class=\"css-1gomreu\"><a class=\"UserLink-link\" href=\"https:\/\/www.zhihu.com\/people\/shuai-qi-mao-mi-11\" target=\"_blank\" rel=\"noopener\" data-za-detail-view-element_name=\"User\">\u5e05\u6c14\u732b\u54aa<\/a><\/div>\n<\/div>\n<div class=\"AuthorInfo-detail\">\n<div class=\"AuthorInfo-badge\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p><button class=\"Button FollowButton Button--primary Button--blue\" type=\"button\">\u200b\u5173\u6ce8<\/button><\/div>\n<div class=\"LabelContainer-wrapper\"><\/div>\n<div tabindex=\"0\" role=\"button\"><span class=\"Voters\"><button class=\"Button Button--plain\" type=\"button\">20 \u4eba\u8d5e\u540c\u4e86\u8be5\u6587\u7ae0<\/button><\/span><\/div>\n<\/header>\n<div class=\"Post-RichTextContainer\">\n<div class=\"css-1yuhvjn\">\n<div class=\"css-376mun\">\n<div class=\"RichText ztext Post-RichText css-1g0fqss\">\n<ul data-first-child=\"\">\n<li data-pid=\"zfQXlEX-\"><a class=\"internal\" href=\"https:\/\/zhuanlan.zhihu.com\/p\/88565144\/edit#%E7%BC%98%E8%B5%B7\" data-za-detail-view-id=\"1043\">\u7f18\u8d77<\/a><\/li>\n<li data-pid=\"KvrmSWs_\"><a class=\"internal\" href=\"https:\/\/zhuanlan.zhihu.com\/p\/88565144\/edit#%E8%BF%9C%E7%A8%8B%E5%BC%80%E5%8F%91\" data-za-detail-view-id=\"1043\">\u8fdc\u7a0b\u5f00\u53d1<\/a><\/li>\n<li data-pid=\"U_8SQzbG\"><a class=\"internal\" href=\"https:\/\/zhuanlan.zhihu.com\/p\/88565144\/edit#%E5%AE%89%E8%A3%85\" data-za-detail-view-id=\"1043\">\u5b89\u88c5<\/a><\/li>\n<li data-pid=\"BND3uJ7Q\"><a class=\"internal\" href=\"https:\/\/zhuanlan.zhihu.com\/p\/88565144\/edit#%E4%BD%BF%E7%94%A8-remote-containers\" data-za-detail-view-id=\"1043\">\u4f7f\u7528 Remote-Containers<\/a><\/li>\n<li data-pid=\"6KorKzuU\"><a class=\"internal\" href=\"https:\/\/zhuanlan.zhihu.com\/p\/88565144\/edit#%E5%9C%A8%E5%AE%B9%E5%99%A8%E4%B8%AD%E6%89%93%E5%BC%80%E9%A1%B9%E7%9B%AE\" data-za-detail-view-id=\"1043\">\u5728\u5bb9\u5668\u4e2d\u6253\u5f00\u9879\u76ee<\/a><\/li>\n<li data-pid=\"5po-xvcs\"><a class=\"internal\" href=\"https:\/\/zhuanlan.zhihu.com\/p\/88565144\/edit#%E4%BF%AE%E6%94%B9%E9%85%8D%E7%BD%AE\" data-za-detail-view-id=\"1043\">\u4fee\u6539\u914d\u7f6e<\/a><\/li>\n<li data-pid=\"yWAI03N_\"><a class=\"internal\" href=\"https:\/\/zhuanlan.zhihu.com\/p\/88565144\/edit#%E7%89%B9%E5%AE%9A%E9%85%8D%E7%BD%AE\" data-za-detail-view-id=\"1043\">\u7279\u5b9a\u914d\u7f6e<\/a><\/li>\n<li data-pid=\"0qtOtTTo\"><a class=\"internal\" href=\"https:\/\/zhuanlan.zhihu.com\/p\/88565144\/edit#%E7%AE%A1%E7%90%86%E6%89%A9%E5%B1%95\" data-za-detail-view-id=\"1043\">\u7ba1\u7406\u6269\u5c55<\/a><\/li>\n<li data-pid=\"hedUiksA\"><a class=\"internal\" href=\"https:\/\/zhuanlan.zhihu.com\/p\/88565144\/edit#%E7%AB%AF%E5%8F%A3%E8%BD%AC%E5%8F%91\" data-za-detail-view-id=\"1043\">\u7aef\u53e3\u8f6c\u53d1<\/a><\/li>\n<li data-pid=\"RVDWKZDa\"><a class=\"internal\" href=\"https:\/\/zhuanlan.zhihu.com\/p\/88565144\/edit#%E7%BB%88%E7%AB%AF\" data-za-detail-view-id=\"1043\">\u7ec8\u7aef<\/a><\/li>\n<li data-pid=\"sDhwodxB\"><a class=\"internal\" href=\"https:\/\/zhuanlan.zhihu.com\/p\/88565144\/edit#%E5%AE%B9%E5%99%A8%E8%AE%BE%E7%BD%AE\" data-za-detail-view-id=\"1043\">\u5bb9\u5668\u8bbe\u7f6e<\/a><\/li>\n<li data-pid=\"bu2aFWvm\"><a class=\"internal\" href=\"https:\/\/zhuanlan.zhihu.com\/p\/88565144\/edit#%E5%9C%A8%E5%AE%B9%E5%99%A8%E7%8E%AF%E5%A2%83%E4%B8%AD%E4%BD%BF%E7%94%A8-git\" data-za-detail-view-id=\"1043\">\u5728\u5bb9\u5668\u73af\u5883\u4e2d\u4f7f\u7528 Git<\/a>\n<ul>\n<li data-pid=\"Yi0Xsgnc\"><a class=\"internal\" href=\"https:\/\/zhuanlan.zhihu.com\/p\/88565144\/edit#%E5%85%B1%E4%BA%AB-git-%E5%87%AD%E6%8D%AE\" data-za-detail-view-id=\"1043\">\u5171\u4eab Git \u51ed\u636e<\/a><\/li>\n<li data-pid=\"T6JVgMnP\"><a class=\"internal\" href=\"https:\/\/zhuanlan.zhihu.com\/p\/88565144\/edit#%E8%A7%A3%E5%86%B3%E6%8D%A2%E8%A1%8C%E7%AC%A6%E9%97%AE%E9%A2%98\" data-za-detail-view-id=\"1043\">\u89e3\u51b3\u6362\u884c\u7b26\u95ee\u9898<\/a><\/li>\n<\/ul>\n<\/li>\n<li data-pid=\"Ut_95a3h\"><a class=\"internal\" href=\"https:\/\/zhuanlan.zhihu.com\/p\/88565144\/edit#%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E7%A4%BA%E4%BE%8B\" data-za-detail-view-id=\"1043\">\u914d\u7f6e\u6587\u4ef6\u793a\u4f8b<\/a><\/li>\n<li data-pid=\"nor3i4p8\"><a class=\"internal\" href=\"https:\/\/zhuanlan.zhihu.com\/p\/88565144\/edit#%E5%8F%82%E8%80%83\" data-za-detail-view-id=\"1043\">\u53c2\u8003<\/a><\/li>\n<\/ul>\n<h2>\u7f18\u8d77<\/h2>\n<p data-pid=\"4AV9F-9R\">\u6211\u7684\u4e3b\u529b\u64cd\u4f5c\u7cfb\u7edf\u662f windows, \u4f46\u6709\u65f6\u4e0d\u5f97\u4e0d\u9700\u8981\u4e00\u4e9b linux \u4e0b\u7684\u7279\u6027, \u6bd4\u5982\u67d0\u4e9b\u5de5\u5177\u6ca1\u6709 windows \u7248\u672c, \u65e0\u6cd5\u4f7f\u7528 MakeFile \u7b49.<\/p>\n<p data-pid=\"TCScsAS2\">\u81ea\u4ece\u5fae\u8f6f\u63a8\u51fa\u4e86 Windows Subsystem for Linux (WSL) \u4e4b\u540e, \u8fd9\u79cd\u60c5\u51b5\u5df2\u7ecf\u597d\u4e86\u4e0d\u5c11\u4e86. \u5177\u4f53\u4f7f\u7528\u53ef\u4ee5\u53c2\u8003\u00a0<a class=\" wrap external\" href=\"https:\/\/link.zhihu.com\/?target=https%3A\/\/docs.microsoft.com\/zh-cn\/windows\/wsl\/about\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" data-za-detail-view-id=\"1043\">\u5b98\u65b9 WSL \u6587\u6863<\/a>.<\/p>\n<p data-pid=\"NIlyc5ZO\">\u4f46\u6211\u4e0d\u592a\u4e60\u60ef\u4f7f\u7528\u5b83, \u65e5\u5e38\u4e2d\u66f4\u504f\u7231\u7684\u662f docker. \u6bd5\u7adf\u8fd8\u662f\u955c\u50cf\u65b9\u4fbf\u70b9, \u9700\u8981\u4ec0\u4e48\u7ec4\u4ef6\u5c31 pull \u4e0b\u6765, \u7528\u5b8c\u4e86\u6216\u8005\u4e2d\u95f4\u641e\u574f\u4e86, \u91cd\u65b0\u5f00\u4e00\u4e2a\u5c31\u884c\u4e86, \u6210\u672c\u5f88\u4f4e.<\/p>\n<h2>\u8fdc\u7a0b\u5f00\u53d1<\/h2>\n<p data-pid=\"5HUtoJPU\"><a class=\" wrap external\" href=\"https:\/\/link.zhihu.com\/?target=https%3A\/\/www.jetbrains.com\/help\/clion\/remote-development.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" data-za-detail-view-id=\"1043\">jetbrains<\/a>\u00a0\u7684 IDE \u662f\u652f\u6301 remote development(\u8fdc\u7a0b\u5f00\u53d1)\u7684, \u5e78\u597d, VS Code \u4e5f\u5f00\u59cb\u652f\u6301\u4e86.<\/p>\n<p data-pid=\"-e9SVyuw\">\u6240\u8c13\u7684\u8fdc\u7a0b\u5f00\u53d1, \u5c31\u662f\u5c06\u8fdc\u7a0b\u7684\u670d\u52a1\u5668, \u6216\u8005\u5bb9\u5668, \u6216 WSL \u4f5c\u4e3a\u5f00\u53d1\u73af\u5883. \u672c\u5730\u7684\u4ee3\u7801\u5b9e\u65f6\u540c\u6b65\u5230\u8fdc\u7a0b\u4e2d, \u800c\u5404\u79cd\u5de5\u5177\u6bd4\u5982\u547d\u4ee4\u884c\u90fd\u662f\u5728\u8fdc\u7a0b\u73af\u5883\u4e2d\u8fd0\u884c\u7684.<\/p>\n<p data-pid=\"c54TLLLg\">\u4e0b\u9762\u5c31\u6765\u4ecb\u7ecd\u4e0b\u5982\u4f55\u4f7f\u7528 VS Code \u8fdb\u884c\u8fdc\u7a0b\u5f00\u53d1.<\/p>\n<h2>\u5b89\u88c5<\/h2>\n<p data-pid=\"_tNfXfnS\">\u9996\u5148, \u9700\u8981\u5728 VS Code \u4e2d\u5b89\u88c5\u5bf9\u5e94\u7684\u63d2\u4ef6,\u00a0<a class=\" wrap external\" href=\"https:\/\/link.zhihu.com\/?target=https%3A\/\/marketplace.visualstudio.com\/items%3FitemName%3Dms-vscode-remote.vscode-remote-extensionpack\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" data-za-detail-view-id=\"1043\">Remote Development extension pack<\/a>.<\/p>\n<p data-pid=\"B15w7kD-\">\u8fd9\u5176\u5b9e\u662f\u63d2\u4ef6\u96c6\u5408, \u5305\u62ec\u4e86 Remote-SSH , Remote-Containers, Remote-WSL \u7b49.<\/p>\n<p data-pid=\"dovgXt5H\">\u5b89\u88c5\u5b8c\u6210\u4e4b\u540e, \u91cd\u542f VS Code. \u5de6\u4e0b\u89d2\u4f1a\u51fa\u73b0\u4e00\u4e2a\u56fe\u6807, \u7c7b\u4f3c\u4e8e\u00a0<code>><<\/code>. \u70b9\u51fb\u4e4b\u540e, \u4f1a\u5f39\u51fa\u5bf9\u5e94\u7684\u547d\u4ee4\u9009\u62e9\u6846.<\/p>\n<figure data-size=\"normal\">\n<div><img loading=\"lazy\" decoding=\"async\" class=\"content_image lazy\" src=\"https:\/\/pic3.zhimg.com\/80\/v2-d55621c2ca853f32522856c6f2407f4a_720w.webp\" width=\"322\" height=\"140\" data-caption=\"\" data-size=\"normal\" data-rawwidth=\"322\" data-rawheight=\"140\" data-actualsrc=\"https:\/\/pic3.zhimg.com\/v2-d55621c2ca853f32522856c6f2407f4a_b.jpg\" data-lazy-status=\"ok\" \/><\/div>\n<\/figure>\n<p data-pid=\"i0rcoh6Q\">\u8fd9\u91cc\u4e3b\u8981\u4ecb\u7ecd\u00a0<code>Remote-Containers<\/code>, \u5176\u4ed6\u7684 Remote-SSH \u548c Remote-WSL \u4e5f\u7c7b\u4f3c, \u5177\u4f53\u53ef\u4ee5\u53c2\u8003\u5b98\u65b9\u6587\u6863\u8bf4\u660e.<\/p>\n<h2>\u4f7f\u7528 Remote-Containers<\/h2>\n<figure data-size=\"normal\">\n<div><img loading=\"lazy\" decoding=\"async\" class=\"origin_image zh-lightbox-thumb lazy\" src=\"https:\/\/pic1.zhimg.com\/80\/v2-a3f6fd4ac28a075a2ece6423e1e7accc_720w.webp\" width=\"968\" height=\"402\" data-caption=\"\" data-size=\"normal\" data-rawwidth=\"968\" data-rawheight=\"402\" data-original=\"https:\/\/pic1.zhimg.com\/v2-a3f6fd4ac28a075a2ece6423e1e7accc_r.jpg\" data-actualsrc=\"https:\/\/pic1.zhimg.com\/v2-a3f6fd4ac28a075a2ece6423e1e7accc_b.jpg\" data-lazy-status=\"ok\" \/><\/div>\n<\/figure>\n<p data-pid=\"fluiEeRJ\">\u4e0a\u56fe\u662f\u5b98\u65b9\u6587\u6863\u4e0a\u7684\u6784\u67b6\u56fe, \u53ef\u4ee5\u770b\u5230\u6e90\u4ee3\u7801\u662f\u901a\u8fc7\u5377\u6620\u5c04\u8fdb\u53bb\u7684, \u547d\u4ee4\u884c\u548c\u8fd0\u884c APP \u548c Debugger \u90fd\u662f\u5728\u5bb9\u5668\u4e2d\u5b8c\u6210\u7684.<\/p>\n<p data-pid=\"yV4eXKgc\"><a class=\" wrap external\" href=\"https:\/\/link.zhihu.com\/?target=https%3A\/\/code.visualstudio.com\/docs\/remote\/containers%23_system-requirements\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" data-za-detail-view-id=\"1043\">\u7cfb\u7edf\u8981\u6c42<\/a>\u00a0\u76f4\u63a5\u770b\u5b98\u65b9\u6587\u6863\u5427, \u8fd9\u91cc\u4e0d\u518d\u89e3\u91ca. \u901a\u5e38\u672c\u5730\u88c5\u597d docker \u5c31\u884c\u4e86.<\/p>\n<h2>\u5728\u5bb9\u5668\u4e2d\u6253\u5f00\u9879\u76ee<\/h2>\n<p data-pid=\"JOPt5DdG\">\u8981\u5728\u5bb9\u5668\u4e2d\u6253\u5f00\u9879\u76ee, \u4f1a\u9762\u4e34\u591a\u79cd\u9009\u62e9:<\/p>\n<ul>\n<li data-pid=\"6EC-Yo5l\">\u65b0\u5efa\u914d\u7f6e<\/li>\n<li data-pid=\"0E-uOe2V\">\u4ece\u9884\u5b9a\u4e49\u597d\u7684\u914d\u7f6e\u4e2d<\/li>\n<li data-pid=\"Jcx-HtEZ\">\u4ece docker-compose.yml \u4e2d<\/li>\n<li data-pid=\"rf8DOIU0\">\u4ece Dockerfile \u4e2d<\/li>\n<li data-pid=\"VgO1zCWT\">\u9644\u52a0\u5230\u5df2\u8fd0\u884c\u7684\u5bb9\u5668\u4e2d<\/li>\n<\/ul>\n<p data-pid=\"dYTeYFJK\">\u8be6\u7ec6\u68b3\u7406\u4e00\u4e0b\u6d41\u7a0b:<\/p>\n<ol>\n<li data-pid=\"wIlZ4HZJ\">\u9009\u62e9\u00a0<code>Remote-Containers: Reopen Folder in Container<\/code>, \u5982\u679c\u6b64\u65f6\u672c\u5730\u8fd8\u6ca1\u6709\u5bf9\u5e94\u7684\u914d\u7f6e, \u5c31\u4f1a\u89e6\u53d1\u00a0<code>\u65b0\u5efa\u914d\u7f6e<\/code>\u00a0\u7684\u8fc7\u7a0b. \u8fd9\u65f6\u53ef\u80fd\u6709\u591a\u79cd\u9009\u9879, \u53d6\u51b3\u4e8e\u672c\u5730\u9879\u76ee\u4e2d\u662f\u5426\u5b58\u5728\u00a0<code>Dockerfile<\/code>\u00a0\u548c\u00a0<code>docker-compose.yml<\/code>\u00a0\u6587\u4ef6.<\/li>\n<li data-pid=\"fKJQdJzO\">\u5fc5\u6709\u7684\u9009\u9879:\u00a0<code>From a predefined container configuration definition...<\/code>. \u8fd9\u4e2a\u9009\u62e9\u4f1a\u663e\u793a\u9884\u5b9a\u597d\u7684\u914d\u7f6e\u6587\u4ef6, \u53ef\u4ee5\u6839\u636e\u81ea\u5df1\u4f7f\u7528\u7684\u8bed\u8a00\u6216\u6280\u672f\u6808\u9009\u62e9\u5bf9\u5e94\u7684\u914d\u7f6e.<\/li>\n<li data-pid=\"Vj5gbQV3\">\u672c\u5730\u9879\u76ee\u4e2d\u5b58\u5728\u00a0<code>Dockerfile<\/code>:\u00a0<code>From Dockerfile<\/code>. \u8fd9\u4f1a\u4f7f\u7528\u672c\u5730\u7684\u00a0<code>Dockerfile<\/code>\u00a0\u6784\u5efa\u5bb9\u5668.<\/li>\n<li data-pid=\"UW00bnce\">\u672c\u5730\u9879\u76ee\u4e2d\u5b58\u5728\u00a0<code>docker-compose.yml<\/code>:\u00a0<code>From docker-compose.yml<\/code>. \u8fd9\u4e2a\u9009\u62e9\u672c\u5730\u7684\u00a0<code>docker-compose.yml<\/code>\u00a0\u4e2d\u7684\u5176\u4e2d\u4e00\u4e2a\u5bb9\u5668\u4f5c\u4e3a\u5f00\u53d1\u73af\u5883.<\/li>\n<li data-pid=\"0AWV-WAv\">\u9009\u62e9\u00a0<code>Remote-Containers: Attach to Running Container...<\/code>, \u4f1a\u8fdb\u5165\u5230\u00a0<code>\u9644\u52a0\u5230\u5df2\u8fd0\u884c\u7684\u5bb9\u5668\u4e2d<\/code>\u00a0\u7684\u8fc7\u7a0b. \u6b64\u65f6, \u9009\u62e9\u5bf9\u5e94\u7684\u672c\u5730\u5bb9\u5668\u5c31\u884c\u4e86.<\/li>\n<\/ol>\n<p data-pid=\"mWg7DzGw\">\u5176\u4ed6\u7684\u6253\u5f00\u65b9\u5f0f\u5305\u62ec:<\/p>\n<ul>\n<li data-pid=\"gfM3-25N\">\u5728\u5bb9\u5668\u4e2d\u6253\u5f00\u6587\u4ef6\u5939\u00a0<code>Remote-Containers: Open Folder in Container...<\/code><\/li>\n<li data-pid=\"M9NS8RLu\">\u5728\u5bb9\u5668\u4e2d\u6253\u5f00\u5de5\u4f5c\u7a7a\u95f4\u00a0<code>Remote-Containers: Open Workspace in Container...<\/code><\/li>\n<li data-pid=\"sUnfmptv\">\u5728\u5bb9\u5668\u4e2d\u6253\u5f00 Repository(\u514b\u9686\u4ee3\u7801\u4e14\u4e0d\u540c\u6b65\u6539\u52a8\u5230\u672c\u5730)\u00a0<code>Remote-Containers: Open Repository in Container...<\/code><\/li>\n<\/ul>\n<h2>\u4fee\u6539\u914d\u7f6e<\/h2>\n<p data-pid=\"BE8SqupG\">\u914d\u7f6e\u6587\u4ef6\u4fdd\u5b58\u5728\u00a0<code>.devcontainer<\/code>\u00a0\u4e2d:<\/p>\n<ul>\n<li data-pid=\"q_kk3EN0\"><code>devcontainer.json<\/code>\u00a0\u914d\u7f6e\u9009\u9879<\/li>\n<li data-pid=\"hxMWDKtP\"><code>Dockerfile<\/code>\u00a0\u5982\u679c\u65b0\u5efa\u65f6\u9009\u62e9\u00a0<code>Dockerfile<\/code><\/li>\n<li data-pid=\"tyGoeaTO\"><code>docker-compose.yml<\/code>\u00a0\u5982\u679c\u65b0\u5efa\u65f6\u9009\u62e9\u00a0<code>docker-compose.yml<\/code><\/li>\n<\/ul>\n<p data-pid=\"w0uPCs3-\">\u66f4\u591a\u914d\u7f6e\u9009\u9879\u53ef\u4ee5\u53c2\u8003\u00a0<a class=\" wrap external\" href=\"https:\/\/link.zhihu.com\/?target=https%3A\/\/code.visualstudio.com\/docs\/remote\/containers%23_devcontainerjson-reference\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" data-za-detail-view-id=\"1043\">devcontainer.json reference<\/a><\/p>\n<h2>\u7279\u5b9a\u914d\u7f6e<\/h2>\n<p data-pid=\"2quWOwsp\">\u5bf9\u4e8e C++, Go, Rust \u7b49\u4f7f\u7528 ptrace-based debugger \u7684\u8bed\u8a00, \u9700\u8981\u5f00\u542f\u4ee5\u4e0b\u914d\u7f6e:<\/p>\n<p data-pid=\"Udj-Dv78\">\u4fee\u6539\u00a0<code>devcontainer.json<\/code>\u00a0\u6587\u4ef6<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-json\"><span class=\"s2\">\"runArgs\"<\/span><span class=\"err\">:<\/span> <span class=\"p\">[<\/span><span class=\"s2\">\"--cap-add=SYS_PTRACE\"<\/span><span class=\"p\">,<\/span> <span class=\"s2\">\"--security-opt\"<\/span><span class=\"p\">,<\/span> <span class=\"s2\">\"seccomp=unconfined\"<\/span><span class=\"p\">]<\/span><\/code><\/pre>\n<\/div>\n<p data-pid=\"PBtrpGPA\">\u5982\u679c\u4f7f\u7528\u00a0<code>docker-compose.yml<\/code>\u00a0\u5219 \u4fee\u6539\u00a0<code>docker-compose.yml<\/code>\u00a0\u6587\u4ef6<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-yaml\"><span class=\"c\"># Required for ptrace-based debuggers like C++, Go, and Rust<\/span>\r\n<span class=\"nt\">cap_add<\/span><span class=\"p\">:<\/span>\r\n  - <span class=\"l\">SYS_PTRACE<\/span>\r\n<span class=\"nt\">security_opt<\/span><span class=\"p\">:<\/span>\r\n  - <span class=\"l\">seccomp:unconfined<\/span><\/code><\/pre>\n<\/div>\n<h2>\u7ba1\u7406\u6269\u5c55<\/h2>\n<p data-pid=\"ARkvRSgg\">\u6269\u5c55\u4f1a\u88ab\u5206\u4e3a\u4e24\u4e2a\u90e8\u5206, \u672c\u5730\u548c\u8fdc\u7a0b\u7684.<\/p>\n<p data-pid=\"1fXD1cTl\">\u672c\u5730\u7684\u6269\u5c55\u4e3b\u8981\u662f\u4e00\u4e9b UI \u76f8\u5173\u7684, \u5176\u4ed6\u6269\u5c55\u90fd\u5b89\u88c5\u5728\u5bb9\u5668\u4e2d\u7684.<\/p>\n<p data-pid=\"8BBbAC-G\">\u8fd9\u53ef\u80fd\u5bf9\u4e8e\u591a\u8bed\u8a00\u5f00\u53d1\u8005(\u6d01\u7656\u60a3\u8005)\u6765\u8bf4\u662f\u4e2a\u4e0d\u9519\u7684\u60c5\u51b5, \u53ea\u8981\u5728\u5bb9\u5668\u4e2d\u5b89\u88c5\u76f8\u5e94\u8bed\u8a00\u6240\u9700\u7684\u6269\u5c55\u5c31\u884c\u4e86, \u53ef\u4ee5\u65e0\u7f1d\u5207\u6362\u5de5\u4f5c\u6d41.<\/p>\n<p data-pid=\"InaEx0ZE\">\u5bf9\u4e8e\u60f3\u8981\u5b8c\u5168\u540c\u6b65\u672c\u5730\u6269\u5c55\u7684\u7528\u6237, \u53ef\u4ee5\u4f7f\u7528\u547d\u4ee4\u00a0<code>Install Local Extensions in Dev Container:<\/code>\u00a0\u5c06\u6240\u6709\u7684\u672c\u5730\u6269\u5c55\u90fd\u5b89\u88c5\u5728\u5bb9\u5668\u4e2d.<\/p>\n<p data-pid=\"CRDQZFQ-\">\u6709\u65f6\u5019, \u5f88\u591a\u6269\u5c55\u662f\u5fc5\u88c5\u7684, \u53ef\u4ee5\u5728\u8bbe\u7f6e\u4e2d\u4fee\u6539<code>\u9ed8\u8ba4\u6269\u5c55<\/code>:<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-json\"><span class=\"s2\">\"remote.containers.defaultExtensions\"<\/span><span class=\"err\">:<\/span> <span class=\"p\">[<\/span>\r\n    <span class=\"s2\">\"eamodio.gitlens\"<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"s2\">\"mutantdino.resourcemonitor\"<\/span>\r\n<span class=\"p\">]<\/span><\/code><\/pre>\n<\/div>\n<p data-pid=\"7OY0wZX9\">\u6269\u5c55\u53ea\u80fd\u8fd0\u884c\u5728\u4e00\u4e2a\u4f4d\u7f6e,\u00a0<code>ui<\/code>\u00a0\u6216\u00a0<code>workspace<\/code>, \u53ef\u4ee5\u5728\u00a0<code>devcontainer.json<\/code>\u00a0\u4e2d\u5f3a\u5236\u6307\u5b9a\u6269\u5c55\u8fd0\u884c\u7684\u4f4d\u7f6e.<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-json\"><span class=\"s2\">\"settings\"<\/span><span class=\"err\">:<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nt\">\"remote.extensionKind\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"nt\">\"ms-azuretools.vscode-docker\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"workspace\"<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span><span class=\"err\">,<\/span><\/code><\/pre>\n<\/div>\n<h2>\u7aef\u53e3\u8f6c\u53d1<\/h2>\n<p data-pid=\"djclcsZf\">\u5982\u679c\u4f60\u5728\u5f00\u53d1 web \u5e94\u7528, \u5f88\u591a\u65f6\u5019\u90fd\u9700\u8981\u8fdb\u884c\u7aef\u53e3\u8f6c\u53d1, \u4ee5\u4fbf\u5728\u672c\u5730\u7684\u6d4f\u89c8\u5668\u4e2d\u8c03\u8bd5, \u8fd9\u4e2a\u65f6\u5019\u53ef\u4ee5\u4f7f\u7528\u7aef\u53e3\u8f6c\u53d1\u529f\u80fd.<\/p>\n<p data-pid=\"jFM78_i5\">\u5728\u547d\u4ee4\u9762\u677f(F1)\u4e2d\u9009\u62e9\u00a0<code>Remote-Containers: Forward Port from Container...<\/code><\/p>\n<p data-pid=\"dCaL8zjT\">\u4e0a\u9762\u7684\u64cd\u4f5c\u901a\u5e38\u7528\u4e8e\u4e34\u65f6\u8f6c\u53d1\u7aef\u53e3.<\/p>\n<p data-pid=\"xlkwsHsg\">\u5982\u679c\u4f60\u6709\u56fa\u5b9a\u7684\u7aef\u53e3\u8981\u8f6c\u53d1, \u53ef\u4ee5\u9009\u62e9\u4ee5\u4e0b\u4e24\u79cd\u65b9\u5f0f\u4e4b\u4e00:<\/p>\n<p data-pid=\"vS_CpoJJ\">\u4fee\u6539\u00a0<code>devcontainer.json<\/code>\u00a0\u914d\u7f6e\u6587\u4ef6:<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-json\"><span class=\"s2\">\"appPort\"<\/span><span class=\"err\">:<\/span> <span class=\"p\">[<\/span> <span class=\"mi\">3000<\/span><span class=\"p\">,<\/span> <span class=\"s2\">\"8921:5000\"<\/span> <span class=\"p\">]<\/span><\/code><\/pre>\n<\/div>\n<p data-pid=\"6bMbYx6c\">\u6216\u8005\u5982\u679c\u4f7f\u7528\u7684\u662f\u00a0<code>docker-compose.yml<\/code>\u00a0\u6587\u4ef6, \u76f4\u63a5\u6dfb\u52a0\u7aef\u53e3:<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-yaml\"><span class=\"nt\">ports<\/span><span class=\"p\">:<\/span>\r\n  - <span class=\"s2\">\"3000\"<\/span>\r\n  - <span class=\"s2\">\"8921:5000\"<\/span><\/code><\/pre>\n<\/div>\n<h2>\u7ec8\u7aef<\/h2>\n<p data-pid=\"ikDP9K89\">\u7ec8\u7aef\u5df2\u7ecf\u53d8\u6210\u4e86\u5bb9\u5668\u4e2d\u7684\u7ec8\u7aef, \u800c\u4e0d\u662f\u672c\u5730\u7684\u7ec8\u7aef\u4e86.<\/p>\n<p data-pid=\"tq_VCn7R\">\u4eab\u53d7 linux \u7684\u4fbf\u5229\u5427.<\/p>\n<h2>\u5bb9\u5668\u8bbe\u7f6e<\/h2>\n<p data-pid=\"O79iO1IB\">\u73b0\u5728\u8bbe\u7f6e\u6587\u4ef6\u5df2\u7ecf\u6709\u4e09\u4efd\u4e86, \u76f8\u6bd4\u666e\u901a\u7684\u7528\u6237\u8bbe\u7f6e\u548c\u5de5\u4f5c\u7a7a\u95f4\u8bbe\u7f6e, \u591a\u4e86\u4e00\u4e2a\u5bb9\u5668\u8bbe\u7f6e, \u4f18\u5148\u7ea7\u662f\u6700\u9ad8\u7684.<\/p>\n<p data-pid=\"gU1dD8X6\">\u4e5f\u53ef\u4ee5\u5728\u00a0<code>devcontainer.json<\/code>\u00a0\u8bbe\u7f6e\u4e00\u4e9b\u9ed8\u8ba4\u7684\u5bb9\u5668\u8bbe\u7f6e:<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-json\"><span class=\"s2\">\"settings\"<\/span><span class=\"err\">:<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nt\">\"java.home\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"\/docker-java-home\"<\/span>\r\n<span class=\"p\">}<\/span><\/code><\/pre>\n<\/div>\n<h2>\u5728\u5bb9\u5668\u73af\u5883\u4e2d\u4f7f\u7528 Git<\/h2>\n<h3>\u5171\u4eab Git \u51ed\u636e<\/h3>\n<p data-pid=\"2z7wCdki\">\u5982\u679c\u4f7f\u7528 HTTPS \u514b\u9686\u9879\u76ee, \u4e14\u4f7f\u7528\u00a0<a class=\" wrap external\" href=\"https:\/\/link.zhihu.com\/?target=https%3A\/\/help.github.com\/en\/articles\/caching-your-github-password-in-git\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" data-za-detail-view-id=\"1043\">\u51ed\u636e\u52a9\u624b<\/a>\u00a0\u5219\u65e0\u9700\u4efb\u4f55\u64cd\u4f5c\u5c31\u53ef\u4ee5\u5171\u4eab\u51ed\u636e.<\/p>\n<p data-pid=\"aoDlSKeZ\">\u5982\u679c\u4f7f\u7528 SSH \u5bc6\u94a5, \u4e3b\u8981\u5c06\u00a0<code>~\/.ssh<\/code>\u00a0\u5b89\u88c5\u5230\u5bb9\u5668\u4e2d\u5c31\u884c\u4e86.<\/p>\n<p data-pid=\"BiEZAJRh\">\u4e0d\u8fc7 windows \u4e0a\u6709\u70b9\u5c0f\u95ee\u9898,\u00a0<code>.ssh<\/code>\u00a0\u4e2d\u7684\u5185\u5bb9\u4e0d\u4f1a\u76f4\u63a5\u590d\u5236\u5230\u5bb9\u5668\u4e2d.<\/p>\n<p data-pid=\"WtBCDU14\">\u4e0d\u8fc7\u5b98\u65b9\u6587\u6863\u4e5f\u63d0\u4f9b\u4e86\u89e3\u51b3\u65b9\u6848.<\/p>\n<p data-pid=\"oA_hvRNe\"><b>\u7b2c\u4e00\u6b65<\/b>:<\/p>\n<p data-pid=\"4QGq93af\">\u590d\u5236\u00a0<code>.ssh<\/code>\u00a0\u6587\u4ef6\u5939\u5230\u5bb9\u5668\u4e2d.<\/p>\n<p data-pid=\"ywrRYBGx\">\u5982\u679c\u4f7f\u7528 Dockerfile \u6216\u9884\u5b9a\u4e49\u7684\u914d\u7f6e, \u5c06\u4e0b\u9762\u7684\u5185\u5bb9\u6dfb\u52a0\u5230\u00a0<code>devcontainer.json<\/code>\u00a0\u6587\u4ef6\u4e2d:<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-json\"><span class=\"s2\">\"runArgs\"<\/span><span class=\"err\">:<\/span> <span class=\"p\">[<\/span> <span class=\"s2\">\"-v\"<\/span><span class=\"p\">,<\/span> <span class=\"s2\">\"${env:HOME}${env:USERPROFILE}\/.ssh:\/root\/.ssh-localhost:ro\"<\/span> <span class=\"p\">]<\/span><\/code><\/pre>\n<\/div>\n<p data-pid=\"XvFNJIdP\">\u5982\u679c\u4f7f\u7528\u00a0<code>docker-compose.yml<\/code>, \u66f4\u65b0\u00a0<code>volumes<\/code>\u00a0\u5b57\u6bb5:<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-yaml\"><span class=\"nt\">version<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"3\"<\/span>\r\n<span class=\"nt\">services<\/span><span class=\"p\">:<\/span>\r\n  <span class=\"nt\">your-service-name-here<\/span><span class=\"p\">:<\/span>\r\n    <span class=\"c\"># ...<\/span>\r\n    <span class=\"nt\">volumes<\/span><span class=\"p\">:<\/span>\r\n      - <span class=\"l\">~\/.ssh:\/root\/.ssh-localhost:ro<\/span><\/code><\/pre>\n<\/div>\n<p data-pid=\"nB6jLhOa\"><b>\u7b2c\u4e8c\u6b65<\/b>:<\/p>\n<p data-pid=\"CglAP7Eh\">\u590d\u5236\u5bc6\u94a5, \u5e76\u8bbe\u7f6e\u6743\u9650.<\/p>\n<p data-pid=\"4E35wN3i\">\u5c06\u4ee5\u4e0b\u5185\u5bb9\u590d\u5236\u5230\u00a0<code>devcontainer.json<\/code>\u00a0\u6587\u4ef6\u4e2d:<\/p>\n<p data-pid=\"Jmky_B-0\">\u4f7f\u7528 root \u8eab\u4efd\u8fd0\u884c\u5bb9\u5668\u65f6<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-json\"><span class=\"s2\">\"postCreateCommand\"<\/span><span class=\"err\">:<\/span> <span class=\"s2\">\"mkdir -p \/root\/.ssh && cp -r \/root\/.ssh-localhost\/* \/root\/.ssh && chmod 700 \/root\/.ssh && chmod 600 \/root\/.ssh\/*\"<\/span><\/code><\/pre>\n<\/div>\n<p data-pid=\"LahrO0qx\">\u4f7f\u7528\u975e root \u8eab\u4efd\u8fd0\u884c\u5bb9\u5668\u65f6<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-json\"><span class=\"s2\">\"postCreateCommand\"<\/span><span class=\"err\">:<\/span> <span class=\"s2\">\"sudo cp -r \/root\/.ssh-localhost ~ && sudo chown -R $(id -u):$(id -g) ~\/.ssh-localhost && mv ~\/.ssh-localhost ~\/.ssh && chmod 700 ~\/.ssh && chmod 600 ~\/.ssh\/*\"<\/span><\/code><\/pre>\n<\/div>\n<p data-pid=\"qxvlSRmO\">\u5982\u679c\u5df2\u7ecf\u521b\u5efa\u4e86\u5bb9\u5668\u4e86, \u9700\u8981\u8fd0\u884c\u547d\u4ee4\u00a0<code>Remote-Containers\uff1aRebuild Container<\/code>\u00a0\u91cd\u65b0\u6784\u5efa\u5bb9\u5668, \u4ee5\u4f7f\u5f97\u6539\u53d8\u751f\u6548.<\/p>\n<h3>\u89e3\u51b3\u6362\u884c\u7b26\u95ee\u9898<\/h3>\n<p data-pid=\"a-QdxuCk\">\u5728\u9879\u76ee\u7684\u00a0<code>.gitattributes<\/code>\u00a0\u6587\u4ef6\u4e2d\u6dfb\u52a0\u4ee5\u4e0b\u5185\u5bb9:<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-text\">* text=auto eol=lf\r\n*.{cmd,[cC][mM][dD]} text eol=crlf\r\n*.{bat,[bB][aA][tT]} text eol=crlf<\/code><\/pre>\n<\/div>\n<h2>\u914d\u7f6e\u6587\u4ef6\u793a\u4f8b<\/h2>\n<p data-pid=\"4BM8UCsW\">\u4ee5\u4e0b\u914d\u7f6e\u6587\u4ef6\u6765\u81ea\u4e8e\u00a0<a class=\" wrap external\" href=\"https:\/\/link.zhihu.com\/?target=https%3A\/\/github.com\/zhenhua32\/go_web\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" data-za-detail-view-id=\"1043\">go_web<\/a>, \u8fd9\u662f\u4e00\u4e2a\u4f7f\u7528 Go \u8bed\u8a00\u5efa\u7acb web \u5e94\u7528\u7684\u793a\u4f8b\u9879\u76ee.<\/p>\n<p data-pid=\"woAg7-OC\"><code>.devcontainer\/devcontainer.json<\/code><\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-json\"><span class=\"err\">\/\/<\/span> <span class=\"err\">If<\/span> <span class=\"err\">you<\/span> <span class=\"err\">want<\/span> <span class=\"err\">to<\/span> <span class=\"err\">run<\/span> <span class=\"err\">as<\/span> <span class=\"err\">a<\/span> <span class=\"err\">non-root<\/span> <span class=\"err\">user<\/span> <span class=\"err\">in<\/span> <span class=\"err\">the<\/span> <span class=\"err\">container,<\/span> <span class=\"err\">see<\/span> <span class=\"err\">.devcontainer\/docker-compose.yml.<\/span>\r\n<span class=\"p\">{<\/span>\r\n  <span class=\"nt\">\"name\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"Existing Docker Compose (Extend)\"<\/span><span class=\"p\">,<\/span>\r\n\r\n  <span class=\"err\">\/\/<\/span> <span class=\"err\">Update<\/span> <span class=\"err\">the<\/span> <span class=\"err\">'dockerComposeFile'<\/span> <span class=\"err\">list<\/span> <span class=\"err\">if<\/span> <span class=\"err\">you<\/span> <span class=\"err\">have<\/span> <span class=\"err\">more<\/span> <span class=\"err\">compose<\/span> <span class=\"err\">files<\/span> <span class=\"err\">or<\/span> <span class=\"err\">use<\/span> <span class=\"err\">different<\/span> <span class=\"err\">names.<\/span>\r\n  <span class=\"err\">\/\/<\/span> <span class=\"err\">The<\/span> <span class=\"err\">.devcontainer\/docker-compose.yml<\/span> <span class=\"err\">file<\/span> <span class=\"err\">contains<\/span> <span class=\"err\">any<\/span> <span class=\"err\">overrides<\/span> <span class=\"err\">you<\/span> <span class=\"err\">need\/want<\/span> <span class=\"err\">to<\/span> <span class=\"err\">make.<\/span>\r\n  <span class=\"nt\">\"dockerComposeFile\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"s2\">\"..\\docker-compose.yml\"<\/span><span class=\"p\">,<\/span> <span class=\"s2\">\"docker-compose.yml\"<\/span><span class=\"p\">],<\/span>\r\n\r\n  <span class=\"err\">\/\/<\/span> <span class=\"err\">The<\/span> <span class=\"err\">'service'<\/span> <span class=\"err\">property<\/span> <span class=\"err\">is<\/span> <span class=\"err\">the<\/span> <span class=\"err\">name<\/span> <span class=\"err\">of<\/span> <span class=\"err\">the<\/span> <span class=\"err\">service<\/span> <span class=\"err\">for<\/span> <span class=\"err\">the<\/span> <span class=\"err\">container<\/span> <span class=\"err\">that<\/span> <span class=\"err\">VS<\/span> <span class=\"err\">Code<\/span> <span class=\"err\">should<\/span>\r\n  <span class=\"err\">\/\/<\/span> <span class=\"err\">use.<\/span> <span class=\"err\">Update<\/span> <span class=\"err\">this<\/span> <span class=\"err\">value<\/span> <span class=\"err\">and<\/span> <span class=\"err\">.devcontainer\/docker-compose.yml<\/span> <span class=\"err\">to<\/span> <span class=\"err\">the<\/span> <span class=\"err\">real<\/span> <span class=\"err\">service<\/span> <span class=\"err\">name.<\/span>\r\n  <span class=\"nt\">\"service\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"web\"<\/span><span class=\"p\">,<\/span>\r\n\r\n  <span class=\"err\">\/\/<\/span> <span class=\"err\">The<\/span> <span class=\"err\">optional<\/span> <span class=\"err\">'workspaceFolder'<\/span> <span class=\"err\">property<\/span> <span class=\"err\">is<\/span> <span class=\"err\">the<\/span> <span class=\"err\">path<\/span> <span class=\"err\">VS<\/span> <span class=\"err\">Code<\/span> <span class=\"err\">should<\/span> <span class=\"err\">open<\/span> <span class=\"err\">by<\/span> <span class=\"err\">default<\/span> <span class=\"err\">when<\/span>\r\n  <span class=\"err\">\/\/<\/span> <span class=\"err\">connected.<\/span> <span class=\"err\">This<\/span> <span class=\"err\">is<\/span> <span class=\"err\">typically<\/span> <span class=\"err\">a<\/span> <span class=\"err\">file<\/span> <span class=\"err\">mount<\/span> <span class=\"err\">in<\/span> <span class=\"err\">.devcontainer\/docker-compose.yml<\/span>\r\n  <span class=\"nt\">\"workspaceFolder\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"\/workspace\"<\/span><span class=\"p\">,<\/span>\r\n\r\n  <span class=\"err\">\/\/<\/span> <span class=\"err\">Use<\/span> <span class=\"err\">'settings'<\/span> <span class=\"err\">to<\/span> <span class=\"err\">set<\/span> <span class=\"err\">*default*<\/span> <span class=\"err\">container<\/span> <span class=\"err\">specific<\/span> <span class=\"err\">settings.json<\/span> <span class=\"err\">values<\/span> <span class=\"err\">on<\/span> <span class=\"err\">container<\/span> <span class=\"err\">create.<\/span>\r\n  <span class=\"err\">\/\/<\/span> <span class=\"err\">You<\/span> <span class=\"err\">can<\/span> <span class=\"err\">edit<\/span> <span class=\"err\">these<\/span> <span class=\"err\">settings<\/span> <span class=\"err\">after<\/span> <span class=\"err\">create<\/span> <span class=\"err\">using<\/span> <span class=\"err\">File<\/span> <span class=\"err\">><\/span> <span class=\"err\">Preferences<\/span> <span class=\"err\">><\/span> <span class=\"err\">Settings<\/span> <span class=\"err\">><\/span> <span class=\"err\">Remote.<\/span>\r\n  <span class=\"nt\">\"settings\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"err\">\/\/<\/span> <span class=\"err\">This<\/span> <span class=\"err\">will<\/span> <span class=\"err\">ignore<\/span> <span class=\"err\">your<\/span> <span class=\"err\">local<\/span> <span class=\"err\">shell<\/span> <span class=\"err\">user<\/span> <span class=\"err\">setting<\/span> <span class=\"err\">for<\/span> <span class=\"err\">Linux<\/span> <span class=\"err\">since<\/span> <span class=\"err\">shells<\/span> <span class=\"err\">like<\/span> <span class=\"err\">zsh<\/span> <span class=\"err\">are<\/span> <span class=\"err\">typically<\/span>\r\n    <span class=\"err\">\/\/<\/span> <span class=\"err\">not<\/span> <span class=\"err\">in<\/span> <span class=\"err\">base<\/span> <span class=\"err\">container<\/span> <span class=\"err\">images.<\/span> <span class=\"err\">You<\/span> <span class=\"err\">can<\/span> <span class=\"err\">also<\/span> <span class=\"err\">update<\/span> <span class=\"err\">this<\/span> <span class=\"err\">to<\/span> <span class=\"err\">an<\/span> <span class=\"err\">specific<\/span> <span class=\"err\">shell<\/span> <span class=\"err\">to<\/span> <span class=\"err\">ensure<\/span> <span class=\"err\">VS<\/span> <span class=\"err\">Code<\/span>\r\n    <span class=\"err\">\/\/<\/span> <span class=\"err\">uses<\/span> <span class=\"err\">the<\/span> <span class=\"err\">right<\/span> <span class=\"err\">one<\/span> <span class=\"err\">for<\/span> <span class=\"err\">terminals<\/span> <span class=\"err\">and<\/span> <span class=\"err\">tasks.<\/span> <span class=\"err\">For<\/span> <span class=\"err\">example,<\/span> <span class=\"err\">\/bin\/bash<\/span> <span class=\"err\">(or<\/span> <span class=\"err\">\/bin\/ash<\/span> <span class=\"err\">for<\/span> <span class=\"err\">Alpine).<\/span>\r\n    <span class=\"nt\">\"terminal.integrated.shell.linux\"<\/span><span class=\"p\">:<\/span> <span class=\"kc\">null<\/span>\r\n  <span class=\"p\">},<\/span>\r\n\r\n  <span class=\"err\">\/\/<\/span> <span class=\"err\">Uncomment<\/span> <span class=\"err\">the<\/span> <span class=\"err\">next<\/span> <span class=\"err\">line<\/span> <span class=\"err\">if<\/span> <span class=\"err\">you<\/span> <span class=\"err\">want<\/span> <span class=\"err\">start<\/span> <span class=\"err\">specific<\/span> <span class=\"err\">services<\/span> <span class=\"err\">in<\/span> <span class=\"err\">your<\/span> <span class=\"err\">Docker<\/span> <span class=\"err\">Compose<\/span> <span class=\"err\">config.<\/span>\r\n  <span class=\"err\">\/\/<\/span> <span class=\"nt\">\"runServices\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">[],<\/span>\r\n\r\n  <span class=\"err\">\/\/<\/span> <span class=\"err\">Uncomment<\/span> <span class=\"err\">the<\/span> <span class=\"err\">next<\/span> <span class=\"err\">line<\/span> <span class=\"err\">if<\/span> <span class=\"err\">you<\/span> <span class=\"err\">want<\/span> <span class=\"err\">to<\/span> <span class=\"err\">keep<\/span> <span class=\"err\">your<\/span> <span class=\"err\">containers<\/span> <span class=\"err\">running<\/span> <span class=\"err\">after<\/span> <span class=\"err\">VS<\/span> <span class=\"err\">Code<\/span> <span class=\"err\">shuts<\/span> <span class=\"err\">down.<\/span>\r\n  <span class=\"err\">\/\/<\/span> <span class=\"nt\">\"shutdownAction\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"none\"<\/span><span class=\"p\">,<\/span>\r\n\r\n  <span class=\"err\">\/\/<\/span> <span class=\"err\">Uncomment<\/span> <span class=\"err\">the<\/span> <span class=\"err\">next<\/span> <span class=\"err\">line<\/span> <span class=\"err\">to<\/span> <span class=\"err\">run<\/span> <span class=\"err\">commands<\/span> <span class=\"err\">after<\/span> <span class=\"err\">the<\/span> <span class=\"err\">container<\/span> <span class=\"err\">is<\/span> <span class=\"err\">created<\/span> <span class=\"err\">-<\/span> <span class=\"err\">for<\/span> <span class=\"err\">example<\/span> <span class=\"err\">installing<\/span> <span class=\"err\">git.<\/span>\r\n  <span class=\"err\">\/\/<\/span> <span class=\"nt\">\"postCreateCommand\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"apt-get update && apt-get install -y git\"<\/span><span class=\"p\">,<\/span>\r\n\r\n  <span class=\"err\">\/\/<\/span> <span class=\"err\">Add<\/span> <span class=\"err\">the<\/span> <span class=\"err\">IDs<\/span> <span class=\"err\">of<\/span> <span class=\"err\">extensions<\/span> <span class=\"err\">you<\/span> <span class=\"err\">want<\/span> <span class=\"err\">installed<\/span> <span class=\"err\">when<\/span> <span class=\"err\">the<\/span> <span class=\"err\">container<\/span> <span class=\"err\">is<\/span> <span class=\"err\">created<\/span> <span class=\"err\">in<\/span> <span class=\"err\">the<\/span> <span class=\"err\">array<\/span> <span class=\"err\">below.<\/span>\r\n  <span class=\"nt\">\"extensions\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">[],<\/span>\r\n\r\n  <span class=\"err\">\/\/<\/span> <span class=\"err\">Mount<\/span> <span class=\"err\">your<\/span> <span class=\"err\">.ssh<\/span> <span class=\"err\">folder<\/span> <span class=\"err\">to<\/span> <span class=\"err\">\/root\/.ssh-localhost<\/span> <span class=\"err\">so<\/span> <span class=\"err\">we<\/span> <span class=\"err\">can<\/span> <span class=\"err\">copy<\/span> <span class=\"err\">its<\/span> <span class=\"err\">contents<\/span>\r\n  <span class=\"nt\">\"runArgs\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span>\r\n    <span class=\"err\">\/\/<\/span> <span class=\"s2\">\"-v\"<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"err\">\/\/<\/span> <span class=\"s2\">\"${env:HOME}${env:USERPROFILE}\/.ssh:\/root\/.ssh-localhost:ro\"<\/span>\r\n  <span class=\"p\">],<\/span>\r\n\r\n  <span class=\"err\">\/\/<\/span> <span class=\"err\">Copy<\/span> <span class=\"err\">the<\/span> <span class=\"err\">contents<\/span> <span class=\"err\">to<\/span> <span class=\"err\">the<\/span> <span class=\"err\">correct<\/span> <span class=\"err\">location<\/span> <span class=\"err\">and<\/span> <span class=\"err\">set<\/span> <span class=\"err\">permissions<\/span>\r\n  <span class=\"nt\">\"postCreateCommand\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"mkdir -p ~\/.ssh && cp -r ~\/.ssh-localhost\/* ~\/.ssh && chmod 700 ~\/.ssh && chmod 600 ~\/.ssh\/*\"<\/span>\r\n<span class=\"p\">}<\/span><\/code><\/pre>\n<\/div>\n<p data-pid=\"qNZ7WDKl\"><code>.devcontainer\/docker-compose.yml<\/code><\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-yaml\"><span class=\"nn\">---<\/span> <span class=\"c\">#-------------------------------------------------------------------------------------------------------------<\/span>\r\n\r\n<span class=\"c\">#-------------------------------------------------------------------------------------------------------------<\/span>\r\n<span class=\"c\"># Copyright (c) Microsoft Corporation. All rights reserved.<\/span>\r\n<span class=\"c\"># Licensed under the MIT License. See https:\/\/go.microsoft.com\/fwlink\/?linkid=2090316 for license information.<\/span>\r\n<span class=\"nt\">version<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"3.7\"<\/span>\r\n<span class=\"nt\">services<\/span><span class=\"p\">:<\/span>\r\n  <span class=\"c\"># Update this to the name of the service you want to work with in your docker-compose.yml file<\/span>\r\n  <span class=\"nt\">web<\/span><span class=\"p\">:<\/span>\r\n    <span class=\"c\"># You may want to add a non-root user to your Dockerfile. On Linux, this will prevent<\/span>\r\n    <span class=\"c\"># new files getting created as root. See https:\/\/aka.ms\/vscode-remote\/containers\/non-root-user<\/span>\r\n    <span class=\"c\"># for the needed Dockerfile updates and then uncomment the next line.<\/span>\r\n    <span class=\"c\"># user: vscode<\/span>\r\n\r\n    <span class=\"c\"># Uncomment if you want to add a different Dockerfile in the .devcontainer folder<\/span>\r\n    <span class=\"c\"># build:<\/span>\r\n    <span class=\"c\">#   context: .<\/span>\r\n    <span class=\"c\">#   dockerfile: Dockerfile<\/span>\r\n\r\n    <span class=\"c\"># Uncomment if you want to expose any additional ports. The snippet below exposes port 3000.<\/span>\r\n    <span class=\"c\"># ports:<\/span>\r\n    <span class=\"c\">#   - 3000:3000<\/span>\r\n\r\n    <span class=\"nt\">volumes<\/span><span class=\"p\">:<\/span>\r\n      <span class=\"c\"># Update this to wherever you want VS Code to mount the folder of your project<\/span>\r\n      - <span class=\"l\">.:\/workspace<\/span>\r\n      - <span class=\"l\">~\/.ssh:\/root\/.ssh-localhost:ro<\/span>\r\n\r\n      <span class=\"c\"># Uncomment the next line to use Docker from inside the container. See https:\/\/aka.ms\/vscode-remote\/samples\/docker-in-docker-compose for details.<\/span>\r\n      <span class=\"c\"># - \/var\/run\/docker.sock:\/var\/run\/docker.sock<\/span>\r\n\r\n    <span class=\"nt\">environment<\/span><span class=\"p\">:<\/span>\r\n      <span class=\"nt\">GOPROXY<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"https:\/\/goproxy.io\"<\/span>\r\n\r\n    <span class=\"c\"># Uncomment the next four lines if you will use a ptrace-based debugger like C++, Go, and Rust.<\/span>\r\n    <span class=\"nt\">cap_add<\/span><span class=\"p\">:<\/span>\r\n      - <span class=\"l\">SYS_PTRACE<\/span>\r\n    <span class=\"nt\">security_opt<\/span><span class=\"p\">:<\/span>\r\n      - <span class=\"l\">seccomp:unconfined<\/span>\r\n\r\n    <span class=\"c\"># Overrides default command so things don't shut down after the process ends.<\/span>\r\n    <span class=\"nt\">command<\/span><span class=\"p\">:<\/span> <span class=\"l\">sleep infinity<\/span><\/code><\/pre>\n<\/div>\n<p data-pid=\"DXs1G5ox\"><code>docker-compose.yml<\/code><\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-yaml\"><span class=\"nt\">version<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"3.7\"<\/span>\r\n\r\n<span class=\"nt\">services<\/span><span class=\"p\">:<\/span>\r\n  <span class=\"nt\">web<\/span><span class=\"p\">:<\/span>\r\n    <span class=\"nt\">image<\/span><span class=\"p\">:<\/span> <span class=\"l\">golang:1.13<\/span>\r\n    <span class=\"c\"># https:\/\/docs.docker.com\/compose\/compose-file\/#init<\/span>\r\n    <span class=\"nt\">init<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span>\r\n    <span class=\"nt\">volumes<\/span><span class=\"p\">:<\/span>\r\n      - <span class=\"l\">.:\/home\/web<\/span>\r\n    <span class=\"nt\">environment<\/span><span class=\"p\">:<\/span>\r\n      <span class=\"nt\">GOPROXY<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"https:\/\/goproxy.io\"<\/span>\r\n\r\n  <span class=\"nt\">mysql<\/span><span class=\"p\">:<\/span>\r\n    <span class=\"nt\">image<\/span><span class=\"p\">:<\/span> <span class=\"l\">mysql:8<\/span>\r\n    <span class=\"nt\">command<\/span><span class=\"p\">:<\/span> --<span class=\"l\">default-authentication-plugin=mysql_native_password<\/span>\r\n    <span class=\"nt\">environment<\/span><span class=\"p\">:<\/span>\r\n      <span class=\"nt\">MYSQL_ROOT_PASSWORD<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"1234\"<\/span>\r\n    <span class=\"nt\">ports<\/span><span class=\"p\">:<\/span>\r\n      - <span class=\"m\">3306<\/span><span class=\"p\">:<\/span><span class=\"m\">3306<\/span>\r\n\r\n  <span class=\"nt\">adminer<\/span><span class=\"p\">:<\/span>\r\n    <span class=\"nt\">image<\/span><span class=\"p\">:<\/span> <span class=\"l\">adminer:4<\/span>\r\n    <span class=\"nt\">ports<\/span><span class=\"p\">:<\/span>\r\n      - <span class=\"m\">8080<\/span><span class=\"p\">:<\/span><span class=\"m\">8080<\/span>\r\n\r\n  <span class=\"nt\">dbclient<\/span><span class=\"p\">:<\/span>\r\n    <span class=\"nt\">image<\/span><span class=\"p\">:<\/span> <span class=\"l\">mysql:8<\/span>\r\n    <span class=\"nt\">command<\/span><span class=\"p\">:<\/span> <span class=\"l\">mysql -hmysql -uroot -p1234 -D db_apiserver<\/span>\r\n    <span class=\"c\"># mysql -hmysql -uroot -p1234<\/span>\r\n    <span class=\"c\"># source \/home\/script\/db.sql<\/span>\r\n    <span class=\"c\"># select * from tb_users G;<\/span>\r\n    <span class=\"nt\">volumes<\/span><span class=\"p\">:<\/span>\r\n      - <span class=\"l\">.\/script:\/home\/script<\/span>\r\n\r\n  <span class=\"nt\">nginx<\/span><span class=\"p\">:<\/span>\r\n    <span class=\"nt\">image<\/span><span class=\"p\">:<\/span> <span class=\"l\">nginx:stable-alpine<\/span>\r\n    <span class=\"nt\">ports<\/span><span class=\"p\">:<\/span>\r\n      - <span class=\"m\">80<\/span><span class=\"p\">:<\/span><span class=\"m\">80<\/span>\r\n    <span class=\"nt\">volumes<\/span><span class=\"p\">:<\/span>\r\n      - <span class=\"l\">.\/conf\/nginx_web.conf:\/etc\/nginx\/conf.d\/nginx_web.conf<\/span>\r\n    <span class=\"nt\">command<\/span><span class=\"p\">:<\/span> <span class=\"l\">nginx -g 'daemon off;'<\/span><\/code><\/pre>\n<\/div>\n<h2>\u53c2\u8003<\/h2>\n<p data-pid=\"rHpKBJd6\"><a class=\" wrap external\" href=\"https:\/\/link.zhihu.com\/?target=https%3A\/\/code.visualstudio.com\/docs\/remote\/remote-overview\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" data-za-detail-view-id=\"1043\">VS Code Remote Development<\/a><\/p>\n<p data-pid=\"vMftOtmK\"><a class=\" wrap external\" href=\"https:\/\/link.zhihu.com\/?target=https%3A\/\/code.visualstudio.com\/docs\/remote\/troubleshooting\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" data-za-detail-view-id=\"1043\">Remote Development Tips and Tricks<\/a><\/p>\n<p data-pid=\"N5UFm95r\"><a class=\" wrap external\" href=\"https:\/\/link.zhihu.com\/?target=https%3A\/\/code.visualstudio.com\/docs\/remote\/containers%23_docker-compose-dev-container-definitions\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" data-za-detail-view-id=\"1043\">Docker Compose dev container definitions<\/a><\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"ContentItem-time\" tabindex=\"0\" role=\"button\">\u53d1\u5e03\u4e8e 2019-10-26 08:59<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u539f\u6587\u5730\u5740 \u00a0 \u5e05\u6c14\u732b\u54aa \u200b\u5173\u6ce8 20 \u4eba<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"colormag_page_container_layout":"default_layout","colormag_page_sidebar_layout":"default_layout","footnotes":""},"categories":[24],"tags":[121],"class_list":["post-6437","post","type-post","status-publish","format-standard","hentry","category-value_docs","tag-05-"],"_links":{"self":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/posts\/6437","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/comments?post=6437"}],"version-history":[{"count":0,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/posts\/6437\/revisions"}],"wp:attachment":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/media?parent=6437"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/categories?post=6437"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/tags?post=6437"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}