{"id":27313,"date":"2023-09-16T16:04:12","date_gmt":"2024-02-22T17:06:55","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e5%9c%a8macos%e4%b8%8a%e8%bf%90%e8%a1%8cgoogle%e7%9a%84container-structure-tests%e3%80%82\/"},"modified":"2025-08-12T01:59:24","modified_gmt":"2025-08-11T17:59:24","slug":"%e5%b0%9d%e8%af%95%e5%9c%a8macos%e4%b8%8a%e8%bf%90%e8%a1%8cgoogle%e7%9a%84container-structure-tests%e3%80%82","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e5%9c%a8macos%e4%b8%8a%e8%bf%90%e8%a1%8cgoogle%e7%9a%84container-structure-tests%e3%80%82\/","title":{"rendered":"\u5c1d\u8bd5\u5728MacOS\u4e0a\u8fd0\u884cGoogle\u7684Container Structure Tests"},"content":{"rendered":"<p>\u6700\u8fd1Google\u53d1\u5e03\u4e86\u4e00\u7bc7\u540d\u4e3a\u300a\u5bb9\u5668\u7ed3\u6784\u6d4b\u8bd5\uff1aDocker\u955c\u50cf\u7684\u5355\u5143\u6d4b\u8bd5 | Google\u5f00\u6e90\u535a\u5ba2\u300b\u7684\u6587\u7ae0\u3002<\/p>\n<p>\u8bd5\u4e00\u8bd5\u5427\u3002<\/p>\n<p>\u4ee5\u4e0b\u662f\u53ef\u4ee5\u6d4b\u8bd5\u7684\u6a21\u5f0f\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30b3\u30de\u30f3\u30c9\u5b9f\u884c\u7d50\u679c<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30d5\u30a1\u30a4\u30eb\u306e\u5834\u6240\u3068\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30d5\u30a1\u30a4\u30eb\u306e\u4e2d\u8eab<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30b3\u30f3\u30c6\u30ca\u30a4\u30e1\u30fc\u30b8\u306e\u30e1\u30bf\u30c7\u30fc\u30bf(EXPOSE\u3068\u304bWORKDIR\u306a\u3069)<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u542b\u307e\u308c\u308bOSS\u306e\u30e9\u30a4\u30bb\u30f3\u30b9 (GCP\u4e0a\u3067\u52d5\u304b\u3057\u3066\u3082\u3088\u3044\u304b\u306e\u30c1\u30a7\u30c3\u30af\u306a\u306e\u304b\u306a\uff1f\u3068\u308a\u3042\u3048\u305adebian\u306e\u307f\u5bfe\u5fdc)<\/ul>\n<p>\u4ece\u5185\u5bb9\u6765\u770b\uff0c\u5982\u679c\u6587\u4ef6\u7684\u63cf\u8ff0\u662f\u6b63\u786e\u7684\uff0c\u90a3\u4e48\u64cd\u4f5c\u5e94\u8be5\u4e5f\u662f\u6b63\u786e\u7684\uff0c\u5c31\u50cf\u4f7f\u7528\u7ed3\u6784\u4e00\u6837\u3002\u6bd5\u7adf\u5b83\u88ab\u79f0\u4e3a\u7ed3\u6784\uff0c\u5e94\u8be5\u662f\u8fd9\u6837\u7684\u3002<\/p>\n<h2>\u5728MacOS\u4e0a\u8fdb\u884c\u8bbe\u7f6e\u636e\u8bf4\u53d1\u653e\u7684\u4e8c\u8fdb\u5236\u6587\u4ef6\u53ea\u80fd\u5728Linux\u4e0a\u8fd0\u884c\u3002\u7531\u4e8e\u6211\u4eec\u63d0\u4f9b\u5bb9\u5668\uff0c\u60a8\u53ef\u4ee5\u5c1d\u8bd5\u4f7f\u7528\u5b83\u3002<\/p>\n<p>\u5c06\u5bb9\u5668\u653e\u5728\u8fd9\u91cc\u3002gcr.io\/gcp-runtimes\/container-structure-test<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>docker pull gcr.io\/gcp-runtimes\/container-structure-test:v0.1.3\r\nv0.1.3: Pulling from gcp-runtimes\/container-structure-test\r\ncd2f5b7886e9: Pull <span class=\"nb\">complete \r\n<\/span>9be56f236f9a: Pull <span class=\"nb\">complete \r\n<\/span>Digest: sha256:15ae6f3996ebc05b657a042bd5dd8f4d4d66b015effea5fd024c70b8a1f9c42a\r\nStatus: Downloaded newer image <span class=\"k\">for <\/span>gcr.io\/gcp-runtimes\/container-structure-test:v0.1.3\r\n<\/code><\/pre>\n<p>\u6211\u4f1a\u8bd5\u7740\u63d0\u4f9b\u5e2e\u52a9\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>docker run gcr.io\/gcp-runtimes\/container-structure-test:v0.1.3 <span class=\"nt\">-h<\/span>\r\nUsage of \/go_default_test:\r\n  <span class=\"nt\">-driver<\/span> string\r\n        driver to use when running tests <span class=\"o\">(<\/span>default <span class=\"s2\">\"docker\"<\/span><span class=\"o\">)<\/span>\r\n  <span class=\"nt\">-image<\/span> string\r\n        path to <span class=\"nb\">test <\/span>image\r\n  <span class=\"nt\">-pull<\/span>\r\n        force a pull of the image before running tests\r\n  <span class=\"nt\">-save<\/span>\r\n        preserve created containers after <span class=\"nb\">test <\/span>run\r\n  <span class=\"nt\">-test<\/span>.bench regexp\r\n        run only benchmarks matching regexp\r\n  <span class=\"nt\">-test<\/span>.benchmem\r\n        print memory allocations <span class=\"k\">for <\/span>benchmarks\r\n  <span class=\"nt\">-test<\/span>.benchtime d\r\n        run each benchmark <span class=\"k\">for <\/span>duration d <span class=\"o\">(<\/span>default 1s<span class=\"o\">)<\/span>\r\n  <span class=\"nt\">-test<\/span>.blockprofile file\r\n        write a goroutine blocking profile to file\r\n  <span class=\"nt\">-test<\/span>.blockprofilerate rate\r\n        <span class=\"nb\">set <\/span>blocking profile rate <span class=\"o\">(<\/span>see runtime.SetBlockProfileRate<span class=\"o\">)<\/span> <span class=\"o\">(<\/span>default 1<span class=\"o\">)<\/span>\r\n  <span class=\"nt\">-test<\/span>.count n\r\n        run tests and benchmarks n <span class=\"nb\">times<\/span> <span class=\"o\">(<\/span>default 1<span class=\"o\">)<\/span>\r\n  <span class=\"nt\">-test<\/span>.coverprofile file\r\n        write a coverage profile to file\r\n  <span class=\"nt\">-test<\/span>.cpu list\r\n        comma-separated list of cpu counts to run each <span class=\"nb\">test <\/span>with\r\n  <span class=\"nt\">-test<\/span>.cpuprofile file\r\n        write a cpu profile to file\r\n  <span class=\"nt\">-test<\/span>.memprofile file\r\n        write a memory profile to file\r\n  <span class=\"nt\">-test<\/span>.memprofilerate rate\r\n        <span class=\"nb\">set <\/span>memory profiling rate <span class=\"o\">(<\/span>see runtime.MemProfileRate<span class=\"o\">)<\/span>\r\n  <span class=\"nt\">-test<\/span>.mutexprofile string\r\n        write a mutex contention profile to the named file after execution\r\n  <span class=\"nt\">-test<\/span>.mutexprofilefraction int\r\n        <span class=\"k\">if<\/span> <span class=\"o\">&gt;=<\/span> 0, calls runtime.SetMutexProfileFraction<span class=\"o\">()<\/span> <span class=\"o\">(<\/span>default 1<span class=\"o\">)<\/span>\r\n  <span class=\"nt\">-test<\/span>.outputdir <span class=\"nb\">dir\r\n        <\/span>write profiles to <span class=\"nb\">dir<\/span>\r\n  <span class=\"nt\">-test<\/span>.parallel n\r\n        run at most n tests <span class=\"k\">in <\/span>parallel <span class=\"o\">(<\/span>default 3<span class=\"o\">)<\/span>\r\n  <span class=\"nt\">-test<\/span>.run regexp\r\n        run only tests and examples matching regexp\r\n  <span class=\"nt\">-test<\/span>.short\r\n        run smaller <span class=\"nb\">test <\/span>suite to save <span class=\"nb\">time<\/span>\r\n  <span class=\"nt\">-test<\/span>.timeout d\r\n        fail <span class=\"nb\">test <\/span>binary execution after duration d <span class=\"o\">(<\/span>0 means unlimited<span class=\"o\">)<\/span>\r\n  <span class=\"nt\">-test<\/span>.trace file\r\n        write an execution trace to file\r\n  <span class=\"nt\">-test<\/span>.v\r\n        verbose: print additional output\r\n<\/code><\/pre>\n<p>\u597d\u5b69\u5b50\u3002<\/p>\n<h2>\u8fdb\u884c\u6837\u672c\u6d4b\u8bd5<br \/>\n\u7531\u4e8e\u5b58\u50a8\u5e93\u4e2d\u5b58\u5728\u6d4b\u8bd5\u6587\u4ef6\uff0c\u8bf7\u5c1d\u8bd5\u4f7f\u7528\u5b83\u3002container-structure-test\/tests\/debian_test.yaml<\/p>\n<p>\u4f60\u597d\u4efd\u306e\u6d4b\u8bd5\u6db5\u76d6\u4e86\u9664\u5143\u6570\u636e\u4ee5\u5916\u7684\u6240\u6709\u5185\u5bb9\u3002<\/p>\n<p>\u9996\u5148\uff0c\u6211\u5011\u4f7f\u7528\u9810\u8a2d\u7684docker\u9a45\u52d5\u7a0b\u5f0f\u5728MacOS\u4e0a\u5617\u8a66\u3002\u53ea\u9700\u639b\u8f09docker.sock\u5c31\u53ef\u4ee5\u4e86\uff0c\u61c9\u8a72\u6c92\u554f\u984c\u3002\u6211\u5011\u4e5f\u61c9\u8a72\u639b\u8f09\u914d\u7f6e\u6587\u4ef6\uff0c\u5728\u6839\u76ee\u9304\u4e0b\u5c31\u884c\u3002<\/p>\n<p>\u5982\u679c\u52a0\u4e0a-pull\u9009\u9879\uff0c\u5c06\u4f1a\u5f3a\u5236\u8981\u6c42\u4f7f\u7528image\u6807\u7b7e\uff08\u5982\u679c\u4e0d\u4f7f\u7528-pull\uff0c\u5219\u4f1a\u4ece\u672c\u5730\u67e5\u627e\u6700\u65b0\u7248\u672c\uff09\uff0c\u5e76\u5728\u6d4b\u8bd5\u4e4b\u524d\u62c9\u53d6\u6700\u65b0\u7248\u672c\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>docker run <span class=\"nt\">--rm<\/span> <span class=\"se\">\\<\/span>\r\n  <span class=\"nt\">-v<\/span> \/var\/run\/docker.sock:\/var\/run\/docker.sock <span class=\"se\">\\<\/span>\r\n  <span class=\"nt\">-v<\/span> <span class=\"sb\">`<\/span><span class=\"nb\">pwd<\/span><span class=\"sb\">`<\/span>\/debian_test.yaml:\/debian_test.yaml <span class=\"se\">\\<\/span>\r\n  gcr.io\/gcp-runtimes\/container-structure-test:v0.1.3 <span class=\"se\">\\<\/span>\r\n  <span class=\"nt\">-pull<\/span> <span class=\"se\">\\<\/span>\r\n  <span class=\"nt\">-test<\/span>.v <span class=\"se\">\\<\/span>\r\n  <span class=\"nt\">--image<\/span> gcr.io\/google-appengine\/debian8:latest <span class=\"se\">\\<\/span>\r\n  debian_test.yaml\r\n\r\nlatest: Pulling from google-appengine\/debian8\r\nDigest: sha256:412ef4d53215ff4a95d275ad48fe5196cb51f4f96b99c05058054b3bdf9443c1\r\nStatus: Image is up to <span class=\"nb\">date <\/span><span class=\"k\">for <\/span>gcr.io\/google-appengine\/debian8:latest\r\nUsing driver docker\r\n<span class=\"o\">===<\/span> RUN   TestAll\r\n<span class=\"o\">===<\/span> RUN   TestAll\/Command_Test:_apt-get\r\n2018\/01\/11 06:40:59 Running tests <span class=\"k\">for <\/span>file debian_test.yaml\r\n<span class=\"o\">===<\/span> RUN   TestAll\/Command_Test:_apt-config\r\n<span class=\"o\">===<\/span> RUN   TestAll\/Command_Test:_path\r\n<span class=\"o\">===<\/span> RUN   TestAll\/File_Existence_Test:_Root\r\n<span class=\"o\">===<\/span> RUN   TestAll\/File_Existence_Test:_Netbase\r\n<span class=\"o\">===<\/span> RUN   TestAll\/File_Existence_Test:_Machine_ID\r\n<span class=\"o\">===<\/span> RUN   TestAll\/File_Content_Test:_Debian_Sources\r\n<span class=\"o\">===<\/span> RUN   TestAll\/File_Content_Test:_Retry_Policy\r\n<span class=\"o\">===<\/span> RUN   TestAll\/Metadata_Test\r\n<span class=\"o\">===<\/span> RUN   TestAll\/License_Test_#0\r\n<span class=\"nt\">---<\/span> PASS: TestAll <span class=\"o\">(<\/span>36.99s<span class=\"o\">)<\/span>\r\n    <span class=\"nt\">---<\/span> PASS: TestAll\/Command_Test:_apt-get <span class=\"o\">(<\/span>1.25s<span class=\"o\">)<\/span>\r\n        docker_driver.go:74: stdout: apt 1.0.9.8.4 <span class=\"k\">for <\/span>amd64 compiled on Dec 11 2016 09:48:19\r\n            Usage: apt-get <span class=\"o\">[<\/span>options] <span class=\"nb\">command\r\n                   <\/span>apt-get <span class=\"o\">[<\/span>options] <span class=\"nb\">install<\/span>|remove pkg1 <span class=\"o\">[<\/span>pkg2 ...]\r\n                   apt-get <span class=\"o\">[<\/span>options] <span class=\"nb\">source <\/span>pkg1 <span class=\"o\">[<\/span>pkg2 ...]\r\n\r\n            apt-get is a simple <span class=\"nb\">command <\/span>line interface <span class=\"k\">for <\/span>downloading and\r\n            installing packages. The most frequently used commands are update\r\n            and install.\r\n\r\n            Commands:\r\n               update - Retrieve new lists of packages\r\n               upgrade - Perform an upgrade\r\n               <span class=\"nb\">install<\/span> - Install new packages <span class=\"o\">(<\/span>pkg is libc6 not libc6.deb<span class=\"o\">)<\/span>\r\n               remove - Remove packages\r\n               autoremove - Remove automatically all unused packages\r\n               purge - Remove packages and config files\r\n               <span class=\"nb\">source<\/span> - Download <span class=\"nb\">source <\/span>archives\r\n               build-dep - Configure build-dependencies <span class=\"k\">for <\/span><span class=\"nb\">source <\/span>packages\r\n               dist-upgrade - Distribution upgrade, see apt-get<span class=\"o\">(<\/span>8<span class=\"o\">)<\/span>\r\n               dselect-upgrade - Follow dselect selections\r\n               clean - Erase downloaded archive files\r\n               autoclean - Erase old downloaded archive files\r\n               check - Verify that there are no broken dependencies\r\n               changelog - Download and display the changelog <span class=\"k\">for <\/span>the given package\r\n               download - Download the binary package into the current directory\r\n\r\n            Options:\r\n              <span class=\"nt\">-h<\/span>  This <span class=\"nb\">help <\/span>text.\r\n              <span class=\"nt\">-q<\/span>  Loggable output - no progress indicator\r\n              <span class=\"nt\">-qq<\/span> No output except <span class=\"k\">for <\/span>errors\r\n              <span class=\"nt\">-d<\/span>  Download only - <span class=\"k\">do <\/span>NOT <span class=\"nb\">install <\/span>or unpack archives\r\n              <span class=\"nt\">-s<\/span>  No-act. Perform ordering simulation\r\n              <span class=\"nt\">-y<\/span>  Assume Yes to all queries and <span class=\"k\">do <\/span>not prompt\r\n              <span class=\"nt\">-f<\/span>  Attempt to correct a system with broken dependencies <span class=\"k\">in <\/span>place\r\n              <span class=\"nt\">-m<\/span>  Attempt to <span class=\"k\">continue if <\/span>archives are unlocatable\r\n              <span class=\"nt\">-u<\/span>  Show a list of upgraded packages as well\r\n              <span class=\"nt\">-b<\/span>  Build the <span class=\"nb\">source <\/span>package after fetching it\r\n              <span class=\"nt\">-V<\/span>  Show verbose version numbers\r\n              <span class=\"nt\">-c<\/span><span class=\"o\">=<\/span>? Read this configuration file\r\n              <span class=\"nt\">-o<\/span><span class=\"o\">=<\/span>? Set an arbitrary configuration option, eg <span class=\"nt\">-o<\/span> <span class=\"nb\">dir<\/span>::cache<span class=\"o\">=<\/span>\/tmp\r\n            See the apt-get<span class=\"o\">(<\/span>8<span class=\"o\">)<\/span>, sources.list<span class=\"o\">(<\/span>5<span class=\"o\">)<\/span> and apt.conf<span class=\"o\">(<\/span>5<span class=\"o\">)<\/span> manual\r\n            pages <span class=\"k\">for <\/span>more information and options.\r\n                                   This APT has Super Cow Powers.\r\n    <span class=\"nt\">---<\/span> PASS: TestAll\/Command_Test:_apt-config <span class=\"o\">(<\/span>1.98s<span class=\"o\">)<\/span>\r\n        docker_driver.go:74: stdout: APT <span class=\"s2\">\"\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Architecture <span class=\"s2\">\"amd64\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Build-Essential <span class=\"s2\">\"\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Build-Essential:: <span class=\"s2\">\"build-essential\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Install-Recommends <span class=\"s2\">\"1\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Install-Suggests <span class=\"s2\">\"0\"<\/span><span class=\"p\">;<\/span>\r\n            APT::NeverAutoRemove <span class=\"s2\">\"\"<\/span><span class=\"p\">;<\/span>\r\n            APT::NeverAutoRemove:: <span class=\"s2\">\"^firmware-linux.*\"<\/span><span class=\"p\">;<\/span>\r\n            APT::NeverAutoRemove:: <span class=\"s2\">\"^linux-firmware$\"<\/span><span class=\"p\">;<\/span>\r\n            APT::VersionedKernelPackages <span class=\"s2\">\"\"<\/span><span class=\"p\">;<\/span>\r\n            APT::VersionedKernelPackages:: <span class=\"s2\">\"linux-image\"<\/span><span class=\"p\">;<\/span>\r\n            APT::VersionedKernelPackages:: <span class=\"s2\">\"linux-headers\"<\/span><span class=\"p\">;<\/span>\r\n            APT::VersionedKernelPackages:: <span class=\"s2\">\"linux-image-extra\"<\/span><span class=\"p\">;<\/span>\r\n            APT::VersionedKernelPackages:: <span class=\"s2\">\"linux-signed-image\"<\/span><span class=\"p\">;<\/span>\r\n            APT::VersionedKernelPackages:: <span class=\"s2\">\"kfreebsd-image\"<\/span><span class=\"p\">;<\/span>\r\n            APT::VersionedKernelPackages:: <span class=\"s2\">\"kfreebsd-headers\"<\/span><span class=\"p\">;<\/span>\r\n            APT::VersionedKernelPackages:: <span class=\"s2\">\"gnumach-image\"<\/span><span class=\"p\">;<\/span>\r\n            APT::VersionedKernelPackages:: <span class=\"s2\">\".*-modules\"<\/span><span class=\"p\">;<\/span>\r\n            APT::VersionedKernelPackages:: <span class=\"s2\">\".*-kernel\"<\/span><span class=\"p\">;<\/span>\r\n            APT::VersionedKernelPackages:: <span class=\"s2\">\"linux-backports-modules-.*\"<\/span><span class=\"p\">;<\/span>\r\n            APT::VersionedKernelPackages:: <span class=\"s2\">\"linux-tools\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Never-MarkAuto-Sections <span class=\"s2\">\"\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Never-MarkAuto-Sections:: <span class=\"s2\">\"metapackages\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Never-MarkAuto-Sections:: <span class=\"s2\">\"restricted\/metapackages\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Never-MarkAuto-Sections:: <span class=\"s2\">\"universe\/metapackages\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Never-MarkAuto-Sections:: <span class=\"s2\">\"multiverse\/metapackages\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Never-MarkAuto-Sections:: <span class=\"s2\">\"oldlibs\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Never-MarkAuto-Sections:: <span class=\"s2\">\"restricted\/oldlibs\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Never-MarkAuto-Sections:: <span class=\"s2\">\"universe\/oldlibs\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Never-MarkAuto-Sections:: <span class=\"s2\">\"multiverse\/oldlibs\"<\/span><span class=\"p\">;<\/span>\r\n            APT::AutoRemove <span class=\"s2\">\"\"<\/span><span class=\"p\">;<\/span>\r\n            APT::AutoRemove::SuggestsImportant <span class=\"s2\">\"false\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Update <span class=\"s2\">\"\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Update::Post-Invoke <span class=\"s2\">\"\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Update::Post-Invoke:: <span class=\"s2\">\"rm -f \/var\/cache\/apt\/archives\/*.deb \/var\/cache\/apt\/archives\/partial\/*.deb \/var\/cache\/apt\/*.bin || true\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Architectures <span class=\"s2\">\"\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Architectures:: <span class=\"s2\">\"amd64\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Compressor <span class=\"s2\">\"\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Compressor::. <span class=\"s2\">\"\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Compressor::.::Name <span class=\"s2\">\".\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Compressor::.::Extension <span class=\"s2\">\"\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Compressor::.::Binary <span class=\"s2\">\"\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Compressor::.::Cost <span class=\"s2\">\"1\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Compressor::gzip <span class=\"s2\">\"\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Compressor::gzip::Name <span class=\"s2\">\"gzip\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Compressor::gzip::Extension <span class=\"s2\">\".gz\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Compressor::gzip::Binary <span class=\"s2\">\"gzip\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Compressor::gzip::Cost <span class=\"s2\">\"2\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Compressor::gzip::CompressArg <span class=\"s2\">\"\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Compressor::gzip::CompressArg:: <span class=\"s2\">\"-9n\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Compressor::gzip::UncompressArg <span class=\"s2\">\"\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Compressor::gzip::UncompressArg:: <span class=\"s2\">\"-d\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Compressor::bzip2 <span class=\"s2\">\"\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Compressor::bzip2::Name <span class=\"s2\">\"bzip2\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Compressor::bzip2::Extension <span class=\"s2\">\".bz2\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Compressor::bzip2::Binary <span class=\"s2\">\"false\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Compressor::bzip2::Cost <span class=\"s2\">\"3\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Compressor::xz <span class=\"s2\">\"\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Compressor::xz::Name <span class=\"s2\">\"xz\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Compressor::xz::Extension <span class=\"s2\">\".xz\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Compressor::xz::Binary <span class=\"s2\">\"false\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Compressor::xz::Cost <span class=\"s2\">\"4\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Compressor::lzma <span class=\"s2\">\"\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Compressor::lzma::Name <span class=\"s2\">\"lzma\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Compressor::lzma::Extension <span class=\"s2\">\".lzma\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Compressor::lzma::Binary <span class=\"s2\">\"false\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Compressor::lzma::Cost <span class=\"s2\">\"5\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Compressor::lzma::CompressArg <span class=\"s2\">\"\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Compressor::lzma::CompressArg:: <span class=\"s2\">\"--suffix=\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Compressor::lzma::CompressArg:: <span class=\"s2\">\"-9\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Compressor::lzma::UncompressArg <span class=\"s2\">\"\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Compressor::lzma::UncompressArg:: <span class=\"s2\">\"--suffix=\"<\/span><span class=\"p\">;<\/span>\r\n            APT::Compressor::lzma::UncompressArg:: <span class=\"s2\">\"-d\"<\/span><span class=\"p\">;<\/span>\r\n            Dir <span class=\"s2\">\"\/\"<\/span><span class=\"p\">;<\/span>\r\n            Dir::State <span class=\"s2\">\"var\/lib\/apt\/\"<\/span><span class=\"p\">;<\/span>\r\n            Dir::State::lists <span class=\"s2\">\"lists\/\"<\/span><span class=\"p\">;<\/span>\r\n            Dir::State::cdroms <span class=\"s2\">\"cdroms.list\"<\/span><span class=\"p\">;<\/span>\r\n            Dir::State::mirrors <span class=\"s2\">\"mirrors\/\"<\/span><span class=\"p\">;<\/span>\r\n            Dir::State::extended_states <span class=\"s2\">\"extended_states\"<\/span><span class=\"p\">;<\/span>\r\n            Dir::State::status <span class=\"s2\">\"\/var\/lib\/dpkg\/status\"<\/span><span class=\"p\">;<\/span>\r\n            Dir::Cache <span class=\"s2\">\"var\/cache\/apt\/\"<\/span><span class=\"p\">;<\/span>\r\n            Dir::Cache::archives <span class=\"s2\">\"archives\/\"<\/span><span class=\"p\">;<\/span>\r\n            Dir::Cache::srcpkgcache <span class=\"s2\">\"\"<\/span><span class=\"p\">;<\/span>\r\n            Dir::Cache::pkgcache <span class=\"s2\">\"\"<\/span><span class=\"p\">;<\/span>\r\n            Dir::Etc <span class=\"s2\">\"etc\/apt\/\"<\/span><span class=\"p\">;<\/span>\r\n            Dir::Etc::sourcelist <span class=\"s2\">\"sources.list\"<\/span><span class=\"p\">;<\/span>\r\n            Dir::Etc::sourceparts <span class=\"s2\">\"sources.list.d\"<\/span><span class=\"p\">;<\/span>\r\n            Dir::Etc::vendorlist <span class=\"s2\">\"vendors.list\"<\/span><span class=\"p\">;<\/span>\r\n            Dir::Etc::vendorparts <span class=\"s2\">\"vendors.list.d\"<\/span><span class=\"p\">;<\/span>\r\n            Dir::Etc::main <span class=\"s2\">\"apt.conf\"<\/span><span class=\"p\">;<\/span>\r\n            Dir::Etc::netrc <span class=\"s2\">\"auth.conf\"<\/span><span class=\"p\">;<\/span>\r\n            Dir::Etc::parts <span class=\"s2\">\"apt.conf.d\"<\/span><span class=\"p\">;<\/span>\r\n            Dir::Etc::preferences <span class=\"s2\">\"preferences\"<\/span><span class=\"p\">;<\/span>\r\n            Dir::Etc::preferencesparts <span class=\"s2\">\"preferences.d\"<\/span><span class=\"p\">;<\/span>\r\n            Dir::Etc::trusted <span class=\"s2\">\"trusted.gpg\"<\/span><span class=\"p\">;<\/span>\r\n            Dir::Etc::trustedparts <span class=\"s2\">\"trusted.gpg.d\"<\/span><span class=\"p\">;<\/span>\r\n            Dir::Bin <span class=\"s2\">\"\"<\/span><span class=\"p\">;<\/span>\r\n            Dir::Bin::methods <span class=\"s2\">\"\/usr\/lib\/apt\/methods\"<\/span><span class=\"p\">;<\/span>\r\n            Dir::Bin::solvers <span class=\"s2\">\"\"<\/span><span class=\"p\">;<\/span>\r\n            Dir::Bin::solvers:: <span class=\"s2\">\"\/usr\/lib\/apt\/solvers\"<\/span><span class=\"p\">;<\/span>\r\n            Dir::Bin::dpkg <span class=\"s2\">\"\/usr\/bin\/dpkg\"<\/span><span class=\"p\">;<\/span>\r\n            Dir::Bin::bzip2 <span class=\"s2\">\"\/bin\/bzip2\"<\/span><span class=\"p\">;<\/span>\r\n            Dir::Bin::xz <span class=\"s2\">\"\/usr\/bin\/xz\"<\/span><span class=\"p\">;<\/span>\r\n            Dir::Bin::lzma <span class=\"s2\">\"\/usr\/bin\/lzma\"<\/span><span class=\"p\">;<\/span>\r\n            Dir::Media <span class=\"s2\">\"\"<\/span><span class=\"p\">;<\/span>\r\n            Dir::Media::MountPath <span class=\"s2\">\"\/media\/apt\"<\/span><span class=\"p\">;<\/span>\r\n            Dir::Log <span class=\"s2\">\"var\/log\/apt\"<\/span><span class=\"p\">;<\/span>\r\n            Dir::Log::Terminal <span class=\"s2\">\"term.log\"<\/span><span class=\"p\">;<\/span>\r\n            Dir::Log::History <span class=\"s2\">\"history.log\"<\/span><span class=\"p\">;<\/span>\r\n            Dir::Ignore-Files-Silently <span class=\"s2\">\"\"<\/span><span class=\"p\">;<\/span>\r\n            Dir::Ignore-Files-Silently:: <span class=\"s2\">\"~$\"<\/span><span class=\"p\">;<\/span>\r\n            Dir::Ignore-Files-Silently:: <span class=\"s2\">\"<\/span><span class=\"se\">\\.<\/span><span class=\"s2\">disabled$\"<\/span><span class=\"p\">;<\/span>\r\n            Dir::Ignore-Files-Silently:: <span class=\"s2\">\"<\/span><span class=\"se\">\\.<\/span><span class=\"s2\">bak$\"<\/span><span class=\"p\">;<\/span>\r\n            Dir::Ignore-Files-Silently:: <span class=\"s2\">\"<\/span><span class=\"se\">\\.<\/span><span class=\"s2\">dpkg-[a-z]+$\"<\/span><span class=\"p\">;<\/span>\r\n            Dir::Ignore-Files-Silently:: <span class=\"s2\">\"<\/span><span class=\"se\">\\.<\/span><span class=\"s2\">save$\"<\/span><span class=\"p\">;<\/span>\r\n            Dir::Ignore-Files-Silently:: <span class=\"s2\">\"<\/span><span class=\"se\">\\.<\/span><span class=\"s2\">orig$\"<\/span><span class=\"p\">;<\/span>\r\n            Dir::Ignore-Files-Silently:: <span class=\"s2\">\"<\/span><span class=\"se\">\\.<\/span><span class=\"s2\">distUpgrade$\"<\/span><span class=\"p\">;<\/span>\r\n            Acquire <span class=\"s2\">\"\"<\/span><span class=\"p\">;<\/span>\r\n            Acquire::cdrom <span class=\"s2\">\"\"<\/span><span class=\"p\">;<\/span>\r\n            Acquire::cdrom::mount <span class=\"s2\">\"\/media\/cdrom\/\"<\/span><span class=\"p\">;<\/span>\r\n            Acquire::Retries <span class=\"s2\">\"3\"<\/span><span class=\"p\">;<\/span>\r\n            Acquire::GzipIndexes <span class=\"s2\">\"true\"<\/span><span class=\"p\">;<\/span>\r\n            Acquire::CompressionTypes <span class=\"s2\">\"\"<\/span><span class=\"p\">;<\/span>\r\n            Acquire::CompressionTypes::Order <span class=\"s2\">\"\"<\/span><span class=\"p\">;<\/span>\r\n            Acquire::CompressionTypes::Order:: <span class=\"s2\">\"gz\"<\/span><span class=\"p\">;<\/span>\r\n            Acquire::Languages <span class=\"s2\">\"\"<\/span><span class=\"p\">;<\/span>\r\n            Acquire::Languages:: <span class=\"s2\">\"none\"<\/span><span class=\"p\">;<\/span>\r\n            DPkg <span class=\"s2\">\"\"<\/span><span class=\"p\">;<\/span>\r\n            DPkg::Pre-Install-Pkgs <span class=\"s2\">\"\"<\/span><span class=\"p\">;<\/span>\r\n            DPkg::Pre-Install-Pkgs:: <span class=\"s2\">\"\/usr\/sbin\/dpkg-preconfigure --apt || true\"<\/span><span class=\"p\">;<\/span>\r\n            DPkg::Post-Invoke <span class=\"s2\">\"\"<\/span><span class=\"p\">;<\/span>\r\n            DPkg::Post-Invoke:: <span class=\"s2\">\"rm -f \/var\/cache\/apt\/archives\/*.deb \/var\/cache\/apt\/archives\/partial\/*.deb \/var\/cache\/apt\/*.bin || true\"<\/span><span class=\"p\">;<\/span>\r\n            CommandLine <span class=\"s2\">\"\"<\/span><span class=\"p\">;<\/span>\r\n            CommandLine::AsString <span class=\"s2\">\"apt-config dump\"<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"nt\">---<\/span> PASS: TestAll\/Command_Test:_path <span class=\"o\">(<\/span>1.54s<span class=\"o\">)<\/span>\r\n        docker_driver.go:74: stdout: \/usr\/local\/sbin:\/usr\/local\/bin:\/usr\/sbin:\/usr\/bin:\/sbin:\/bin\r\n    <span class=\"nt\">---<\/span> PASS: TestAll\/File_Existence_Test:_Root <span class=\"o\">(<\/span>0.67s<span class=\"o\">)<\/span>\r\n    <span class=\"nt\">---<\/span> PASS: TestAll\/File_Existence_Test:_Netbase <span class=\"o\">(<\/span>0.16s<span class=\"o\">)<\/span>\r\n    <span class=\"nt\">---<\/span> PASS: TestAll\/File_Existence_Test:_Machine_ID <span class=\"o\">(<\/span>0.16s<span class=\"o\">)<\/span>\r\n    <span class=\"nt\">---<\/span> PASS: TestAll\/File_Content_Test:_Debian_Sources <span class=\"o\">(<\/span>0.14s<span class=\"o\">)<\/span>\r\n    <span class=\"nt\">---<\/span> PASS: TestAll\/File_Content_Test:_Retry_Policy <span class=\"o\">(<\/span>0.18s<span class=\"o\">)<\/span>\r\n    <span class=\"nt\">---<\/span> PASS: TestAll\/Metadata_Test <span class=\"o\">(<\/span>0.00s<span class=\"o\">)<\/span>\r\n    <span class=\"nt\">---<\/span> PASS: TestAll\/License_Test_#0 <span class=\"o\">(<\/span>30.90s<span class=\"o\">)<\/span>\r\n        licenses.go:70: acl\r\n        licenses.go:70: adduser\r\n        licenses.go:70: apt\r\n        licenses.go:70: base-files\r\n        licenses.go:70: base-passwd\r\n        licenses.go:70: bash\r\n        licenses.go:70: bsdutils\r\n        licenses.go:70: ca-certificates\r\n        licenses.go:70: coreutils\r\n        licenses.go:70: dash\r\n        licenses.go:70: debconf\r\n        licenses.go:70: debian-archive-keyring\r\n        licenses.go:70: debianutils\r\n        licenses.go:70: diffutils\r\n        licenses.go:70: dmsetup\r\n        licenses.go:70: dpkg\r\n        licenses.go:70: e2fslibs\r\n        licenses.go:70: e2fsprogs\r\n        licenses.go:70: findutils\r\n        licenses.go:70: gcc-4.8-base\r\n        licenses.go:70: gcc-4.9-base\r\n        licenses.go:70: gnupg\r\n        licenses.go:70: gpgv\r\n        licenses.go:70: <span class=\"nb\">grep\r\n        <\/span>licenses.go:70: <span class=\"nb\">gzip\r\n        <\/span>licenses.go:70: <span class=\"nb\">hostname\r\n        <\/span>licenses.go:70: init\r\n        licenses.go:70: initscripts\r\n        licenses.go:70: insserv\r\n        licenses.go:70: libacl1\r\n        licenses.go:70: libapt-pkg4.12\r\n        licenses.go:70: libattr1\r\n        licenses.go:70: libaudit-common\r\n        licenses.go:70: libaudit1\r\n        licenses.go:70: libblkid1\r\n        licenses.go:70: libbz2-1.0\r\n        licenses.go:70: libc-bin\r\n        licenses.go:70: libc6\r\n        licenses.go:70: libcap2\r\n        licenses.go:70: libcap2-bin\r\n        licenses.go:70: libcomerr2\r\n        licenses.go:70: libcryptsetup4\r\n        licenses.go:70: libdb5.3\r\n        licenses.go:70: libdebconfclient0\r\n        licenses.go:70: libdevmapper1.02.1\r\n        licenses.go:70: libgcrypt20\r\n        licenses.go:70: libgpg-error0\r\n        licenses.go:70: libkmod2\r\n        licenses.go:70: liblocale-gettext-perl\r\n        licenses.go:70: liblzma5\r\n        licenses.go:70: libmount1\r\n        licenses.go:70: libpam-modules\r\n        licenses.go:70: libpam-modules-bin\r\n        licenses.go:70: libpam-runtime\r\n        licenses.go:70: libpam0g\r\n        licenses.go:70: libpcre3\r\n        licenses.go:70: libprocps3\r\n        licenses.go:70: libreadline6\r\n        licenses.go:70: libselinux1\r\n        licenses.go:70: libsemanage-common\r\n        licenses.go:70: libsemanage1\r\n        licenses.go:70: libsepol1\r\n        licenses.go:70: libslang2\r\n        licenses.go:70: libsmartcols1\r\n        licenses.go:70: libss2\r\n        licenses.go:70: libssl1.0.0\r\n        licenses.go:70: libsystemd0\r\n        licenses.go:70: libtext-charwidth-perl\r\n        licenses.go:70: libtext-iconv-perl\r\n        licenses.go:70: libtext-wrapi18n-perl\r\n        licenses.go:70: libtinfo5\r\n        licenses.go:70: libudev1\r\n        licenses.go:70: libusb-0.1-4\r\n        licenses.go:70: libustr-1.0-1\r\n        licenses.go:70: libuuid1\r\n        licenses.go:70: login\r\n        licenses.go:70: lsb-base\r\n        licenses.go:70: mawk\r\n        licenses.go:70: mount\r\n        licenses.go:70: multiarch-support\r\n        licenses.go:70: ncurses-base\r\n        licenses.go:70: ncurses-bin\r\n        licenses.go:70: netbase\r\n        licenses.go:70: openssl\r\n        licenses.go:70: passwd\r\n        licenses.go:70: perl\r\n        licenses.go:70: procps\r\n        licenses.go:70: readline-common\r\n        licenses.go:70: <span class=\"nb\">sed\r\n        <\/span>licenses.go:70: sensible-utils\r\n        licenses.go:70: startpar\r\n        licenses.go:70: systemd\r\n        licenses.go:70: systemd-sysv\r\n        licenses.go:70: sysv-rc\r\n        licenses.go:70: sysvinit-utils\r\n        licenses.go:70: <span class=\"nb\">tar\r\n        <\/span>licenses.go:70: tzdata\r\n        licenses.go:70: util-linux\r\n        licenses.go:70: zlib1g\r\n    structure_test.go:47: Total tests run: 10\r\nPASS\r\n<\/code><\/pre>\n<p>\u5982\u679c\u6700\u540e\u4ee5PASS\u7ed3\u675f\u5c31\u53ef\u4ee5\u4e86\u3002\u5982\u679c\u4e0d\u52a0-test.v\u9009\u9879\uff0c\u5219\u53ea\u4f1a\u663e\u793aPASS\u3002\u800c\u4e14\uff0c\u5982\u679c\u5931\u8d25\u7684\u8bdd\uff0cexit_code\u4e5f\u4f1a\u4ee5\u975e0\u7684\u503c\u6b63\u5e38\u7ed3\u675f\uff0c\u6240\u4ee5\u8bf7\u653e\u5fc3\u3002<\/p>\n<h3>\u8ba9\u6211\u4eec\u5c1d\u8bd5\u4e0bmetadataTest\u5427\u3002<br \/>\n\u5728\u6837\u672c\u4e2d\u672a\u5305\u542bmetadataTest\u3002\u901a\u8fc7\u68c0\u67e5image\uff0c\u6211\u4f1a\u7b80\u8981\u5730\u5199\u4e00\u4e0b\u5b9a\u4e49\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"na\">schemaVersion<\/span><span class=\"pi\">:<\/span> <span class=\"s1\">'<\/span><span class=\"s\">2.0.0'<\/span>\r\n<span class=\"na\">metadataTest<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">env<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"pi\">-<\/span> <span class=\"na\">key<\/span><span class=\"pi\">:<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">PORT\"<\/span>\r\n      <span class=\"na\">value<\/span><span class=\"pi\">:<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">8080\"<\/span>\r\n  <span class=\"na\">entrypoint<\/span><span class=\"pi\">:<\/span> <span class=\"pi\">[]<\/span>\r\n  <span class=\"na\">cmd<\/span><span class=\"pi\">:<\/span> <span class=\"pi\">[<\/span><span class=\"s2\">\"<\/span><span class=\"s\">\/bin\/sh\"<\/span><span class=\"pi\">,<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">-c\"<\/span><span class=\"pi\">,<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">\/bin\/bash\"<\/span><span class=\"pi\">]<\/span>\r\n<\/code><\/pre>\n<p>\u66f4\u6539\u6587\u4ef6\u6307\u5b9a\u5e76\u6267\u884c\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>docker run <span class=\"nt\">--rm<\/span> <span class=\"se\">\\<\/span>\r\n  <span class=\"nt\">-v<\/span> \/var\/run\/docker.sock:\/var\/run\/docker.sock <span class=\"se\">\\<\/span>\r\n  <span class=\"nt\">-v<\/span> <span class=\"sb\">`<\/span><span class=\"nb\">pwd<\/span><span class=\"sb\">`<\/span>\/metatest.yaml:\/metatest.yaml <span class=\"se\">\\<\/span>\r\n  gcr.io\/gcp-runtimes\/container-structure-test:v0.1.3 <span class=\"se\">\\<\/span>\r\n  <span class=\"nt\">-pull<\/span> <span class=\"se\">\\<\/span>\r\n  <span class=\"nt\">-test<\/span>.v <span class=\"se\">\\<\/span>\r\n  <span class=\"nt\">--image<\/span> gcr.io\/google-appengine\/debian8:latest <span class=\"se\">\\<\/span>\r\n  metatest.yaml\r\n\r\nlatest: Pulling from google-appengine\/debian8\r\nDigest: sha256:412ef4d53215ff4a95d275ad48fe5196cb51f4f96b99c05058054b3bdf9443c1\r\nStatus: Image is up to <span class=\"nb\">date <\/span><span class=\"k\">for <\/span>gcr.io\/google-appengine\/debian8:latest\r\nUsing driver docker\r\n<span class=\"o\">===<\/span> RUN   TestAll\r\n<span class=\"o\">===<\/span> RUN   TestAll\/Metadata_Test\r\n2018\/01\/11 06:54:58 Running tests <span class=\"k\">for <\/span>file metatest.yaml\r\n<span class=\"nt\">---<\/span> PASS: TestAll <span class=\"o\">(<\/span>0.01s<span class=\"o\">)<\/span>\r\n    <span class=\"nt\">---<\/span> PASS: TestAll\/Metadata_Test <span class=\"o\">(<\/span>0.00s<span class=\"o\">)<\/span>\r\n    structure_test.go:47: Total tests run: 1\r\nPASS\r\n<\/code><\/pre>\n<p>\u770b\u8d77\u6765\u4f60\u5728\u8003\u8bd5\u4e2d\u987a\u5229\u5ea6\u8fc7\u4e86\u3002<\/p>\n<h2>\u5728\u6ca1\u6709\u4f7f\u7528dockerd\u7684\u60c5\u51b5\u4e0b\uff0c\u5c06tar\u6587\u4ef6\u6307\u5b9a\u7ed9\u9a71\u52a8\u7a0b\u5e8f\u8fdb\u884c\u68c0\u67e5\u3002<br \/>\n\u597d\u7684\uff0c\u5728Google\u7684\u6587\u7ae0\u4e2d\uff0c\u6211\u5728\u5f00\u5934\u653e\u4e86\u4e00\u4e2a\u94fe\u63a5\uff0c\u8bf4dockerd\u4e0d\u9700\u8981\u4e5f\u53ef\u4ee5\u8fdb\u884c\u6d4b\u8bd5\uff01\u6240\u4ee5\u73b0\u5728\u6211\u5c06\u6307\u5b9a-driver tar\uff0c\u5c1d\u8bd5\u5c06docker\u7684\u5957\u63a5\u5b57\u53bb\u6389\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>docker run <span class=\"nt\">--rm<\/span> <span class=\"se\">\\<\/span>\r\n  <span class=\"nt\">-v<\/span> <span class=\"sb\">`<\/span><span class=\"nb\">pwd<\/span><span class=\"sb\">`<\/span>\/debian_test.yaml:\/debian_test.yaml <span class=\"se\">\\<\/span>\r\n  gcr.io\/gcp-runtimes\/container-structure-test:v0.1.3 <span class=\"se\">\\<\/span>\r\n  <span class=\"nt\">-driver<\/span> <span class=\"nb\">tar<\/span> <span class=\"se\">\\<\/span>\r\n  <span class=\"nt\">-test<\/span>.v <span class=\"se\">\\<\/span>\r\n  <span class=\"nt\">--image<\/span> gcr.io\/google-appengine\/debian8:latest <span class=\"se\">\\<\/span>\r\n  debian_test.yaml\r\n\r\n\r\nUsing driver <span class=\"nb\">tar<\/span>\r\n<span class=\"o\">===<\/span> RUN   TestAll\r\n2018\/01\/11 06:44:51 Running tests <span class=\"k\">for <\/span>file debian_test.yaml\r\nRetrieving image gcr.io\/google-appengine\/debian8:latest from <span class=\"nb\">source <\/span>Cloud Registry\r\n\r\n<span class=\"nt\">--<\/span> \u7701\u7565\r\n<span class=\"nt\">---<\/span> FAIL: TestAll <span class=\"o\">(<\/span>19.89s<span class=\"o\">)<\/span>\r\n    <span class=\"nt\">---<\/span> FAIL: TestAll\/Command_Test:_apt-get <span class=\"o\">(<\/span>10.03s<span class=\"o\">)<\/span>\r\n        tar_driver.go:66: Tar driver is unable to process commands, please use a different driver\r\n    <span class=\"nt\">---<\/span> PASS: TestAll\/Metadata_Test <span class=\"o\">(<\/span>9.86s<span class=\"o\">)<\/span>\r\n    structure_test.go:47: Total tests run: 1\r\n<\/code><\/pre>\n<p>commandTests\u4f3c\u4e4e\u5b8c\u5168\u4e0d\u8d77\u4f5c\u7528\u3002\u8acb\u5c07commandTests\u90e8\u5206\u8a3b\u91cb\u6389\uff0c\u7136\u5f8c\u91cd\u65b0\u57f7\u884c\u3002<\/p>\n<pre class=\"post-pre\"><code>Using driver <span class=\"nb\">tar<\/span>\r\n<span class=\"o\">===<\/span> RUN   TestAll\r\n2018\/01\/11 07:18:55 Running tests <span class=\"k\">for <\/span>file debian_test.yaml\r\nRetrieving image gcr.io\/google-appengine\/debian8:latest from <span class=\"nb\">source <\/span>Cloud Registry\r\n<span class=\"o\">===<\/span> RUN   TestAll\/File_Existence_Test:_Root\r\n<span class=\"nb\">time<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"2018-01-11T07:19:04Z\"<\/span> <span class=\"nv\">level<\/span><span class=\"o\">=<\/span>info <span class=\"nv\">msg<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"Finished prepping image gcr.io\/google-appengine\/debian8:latest\"<\/span>\r\n<span class=\"nb\">time<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"2018-01-11T07:19:04Z\"<\/span> <span class=\"nv\">level<\/span><span class=\"o\">=<\/span>info <span class=\"nv\">msg<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"Removing image filesystem directory \/tmp\/gcr.iogoogle-appenginedebian8latest743647843 from system\"<\/span>\r\n<span class=\"o\">===<\/span> RUN   TestAll\/File_Existence_Test:_Netbase\r\nRetrieving image gcr.io\/google-appengine\/debian8:latest from <span class=\"nb\">source <\/span>Cloud Registry\r\n<span class=\"nb\">time<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"2018-01-11T07:19:14Z\"<\/span> <span class=\"nv\">level<\/span><span class=\"o\">=<\/span>info <span class=\"nv\">msg<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"Finished prepping image gcr.io\/google-appengine\/debian8:latest\"<\/span>\r\n<span class=\"nb\">time<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"2018-01-11T07:19:14Z\"<\/span> <span class=\"nv\">level<\/span><span class=\"o\">=<\/span>info <span class=\"nv\">msg<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"Removing image filesystem directory \/tmp\/gcr.iogoogle-appenginedebian8latest188699238 from system\"<\/span>\r\nRetrieving image gcr.io\/google-appengine\/debian8:latest from <span class=\"nb\">source <\/span>Cloud Registry\r\n<span class=\"o\">===<\/span> RUN   TestAll\/File_Existence_Test:_Machine_ID\r\n<span class=\"nb\">time<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"2018-01-11T07:19:24Z\"<\/span> <span class=\"nv\">level<\/span><span class=\"o\">=<\/span>info <span class=\"nv\">msg<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"Finished prepping image gcr.io\/google-appengine\/debian8:latest\"<\/span>\r\n<span class=\"nb\">time<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"2018-01-11T07:19:24Z\"<\/span> <span class=\"nv\">level<\/span><span class=\"o\">=<\/span>info <span class=\"nv\">msg<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"Removing image filesystem directory \/tmp\/gcr.iogoogle-appenginedebian8latest359712397 from system\"<\/span>\r\nRetrieving image gcr.io\/google-appengine\/debian8:latest from <span class=\"nb\">source <\/span>Cloud Registry\r\n<span class=\"o\">===<\/span> RUN   TestAll\/File_Content_Test:_Debian_Sources\r\n<span class=\"nb\">time<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"2018-01-11T07:19:34Z\"<\/span> <span class=\"nv\">level<\/span><span class=\"o\">=<\/span>info <span class=\"nv\">msg<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"Finished prepping image gcr.io\/google-appengine\/debian8:latest\"<\/span>\r\n<span class=\"nb\">time<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"2018-01-11T07:19:34Z\"<\/span> <span class=\"nv\">level<\/span><span class=\"o\">=<\/span>info <span class=\"nv\">msg<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"Removing image filesystem directory \/tmp\/gcr.iogoogle-appenginedebian8latest785687176 from system\"<\/span>\r\nRetrieving image gcr.io\/google-appengine\/debian8:latest from <span class=\"nb\">source <\/span>Cloud Registry\r\n<span class=\"o\">===<\/span> RUN   TestAll\/File_Content_Test:_Retry_Policy\r\n<span class=\"nb\">time<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"2018-01-11T07:19:44Z\"<\/span> <span class=\"nv\">level<\/span><span class=\"o\">=<\/span>info <span class=\"nv\">msg<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"Finished prepping image gcr.io\/google-appengine\/debian8:latest\"<\/span>\r\n<span class=\"nb\">time<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"2018-01-11T07:19:44Z\"<\/span> <span class=\"nv\">level<\/span><span class=\"o\">=<\/span>info <span class=\"nv\">msg<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"Removing image filesystem directory \/tmp\/gcr.iogoogle-appenginedebian8latest267774023 from system\"<\/span>\r\nRetrieving image gcr.io\/google-appengine\/debian8:latest from <span class=\"nb\">source <\/span>Cloud Registry\r\n\r\n... \u7701\u7565\r\n\r\n        licenses.go:70: startpar\r\n        licenses.go:70: systemd\r\n        licenses.go:70: systemd-sysv\r\n        licenses.go:70: sysv-rc\r\n        licenses.go:70: sysvinit-utils\r\n        licenses.go:70: <span class=\"nb\">tar\r\n        <\/span>licenses.go:70: tzdata\r\n        licenses.go:70: util-linux\r\n        licenses.go:70: zlib1g\r\n    structure_test.go:47: Total tests run: 7\r\nPASS\r\n<\/code><\/pre>\n<p>\u6211\u901a\u8fc7\u4e86\u3002\u6bcf\u6b21\u8003\u8bd5\u90fd\u9700\u8981\u5c55\u5f00\u5e76\u5220\u9664\u6587\u4ef6\uff0c\u8fd9\u6837\u975e\u5e38\u8017\u65f6\u3002<\/p>\n<p>metadataTest\u4f1a\u600e\u4e48\u6837\u5462\uff1f<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>docker run <span class=\"nt\">--rm<\/span> <span class=\"se\">\\<\/span>\r\n  <span class=\"nt\">-v<\/span> <span class=\"sb\">`<\/span><span class=\"nb\">pwd<\/span><span class=\"sb\">`<\/span>\/metatest.yaml:\/metatest.yaml <span class=\"se\">\\<\/span>\r\n  gcr.io\/gcp-runtimes\/container-structure-test:v0.1.3 <span class=\"se\">\\<\/span>\r\n  <span class=\"nt\">-driver<\/span> <span class=\"nb\">tar<\/span> <span class=\"se\">\\<\/span>\r\n  <span class=\"nt\">-test<\/span>.v <span class=\"se\">\\<\/span>\r\n  <span class=\"nt\">--image<\/span> gcr.io\/google-appengine\/debian8:latest <span class=\"se\">\\<\/span>\r\n  metatest.yaml\r\n\r\n\r\nUsing driver <span class=\"nb\">tar<\/span>\r\n<span class=\"o\">===<\/span> RUN   TestAll\r\n<span class=\"o\">===<\/span> RUN   TestAll\/Metadata_Test\r\n2018\/01\/11 06:56:09 Running tests <span class=\"k\">for <\/span>file metatest.yaml\r\nRetrieving image gcr.io\/google-appengine\/debian8:latest from <span class=\"nb\">source <\/span>Cloud Registry\r\n<span class=\"nb\">time<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"2018-01-11T06:56:19Z\"<\/span> <span class=\"nv\">level<\/span><span class=\"o\">=<\/span>info <span class=\"nv\">msg<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"Finished prepping image gcr.io\/google-appengine\/debian8:latest\"<\/span>\r\n<span class=\"nb\">time<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"2018-01-11T06:56:19Z\"<\/span> <span class=\"nv\">level<\/span><span class=\"o\">=<\/span>info <span class=\"nv\">msg<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"Removing image filesystem directory \/tmp\/gcr.iogoogle-appenginedebian8latest068032231 from system\"<\/span>\r\n<span class=\"nt\">---<\/span> PASS: TestAll <span class=\"o\">(<\/span>10.13s<span class=\"o\">)<\/span>\r\n    <span class=\"nt\">---<\/span> PASS: TestAll\/Metadata_Test <span class=\"o\">(<\/span>10.13s<span class=\"o\">)<\/span>\r\n    structure_test.go:47: Total tests run: 1\r\nPASS\r\n<\/code><\/pre>\n<p>\u54e6\uff0c\u4f60\u80fd\u591f\u505a\u5f97\u5f88\u597d\u5462\u3002\u7531\u4e8ecommandTests\u4e0d\u592a\u5408\u9002\uff0c\u6240\u4ee5\u6309\u7167\u8fd9\u4e2a\u6765\u505a\u662f\u7406\u60f3\u7684\u60c5\u51b5\u5462\u3002\u5982\u679c\u5728\u666e\u901a\u7684Linux\u73af\u5883\u4e0b\u8fd0\u884cCI\uff0c\u6587\u4ef6\u7684\u5c55\u5f00\u548c\u5220\u9664\u4e5f\u5e94\u8be5\u4f1a\u5f88\u5feb\u3002<\/p>\n<h2>\u6700\u540e<br \/>\n\u6211\u8ba4\u4e3a\u5b83\u975e\u5e38\u9002\u5408\u5bb9\u5668\u5316\u5904\u7406\uff0c\u53ef\u4ee5\u4f7f\u7528\u6613\u8bfb\u7684Yaml\u683c\u5f0f\u7f16\u5199\uff0c\u53ea\u9700\u4f7f\u7528\u5e38\u89c4\u547d\u4ee4\u548c\u7b80\u6d01\u7684\u7ed3\u679c\u6765\u8fdb\u884c\u68c0\u67e5\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u6700\u8fd1Google\u53d1\u5e03\u4e86\u4e00\u7bc7\u540d\u4e3a\u300a\u5bb9\u5668\u7ed3\u6784\u6d4b\u8bd5\uff1aDocker\u955c\u50cf\u7684\u5355\u5143\u6d4b\u8bd5 | Google\u5f00\u6e90\u535a\u5ba2\u300b\u7684\u6587\u7ae0\u3002  [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[227],"class_list":["post-27313","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-227"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u5c1d\u8bd5\u5728MacOS\u4e0a\u8fd0\u884cGoogle\u7684Container Structure Tests - Blog - Silicon Cloud<\/title>\n<meta name=\"description\" content=\"\u5173\u4e8e\u5c1d\u8bd5\u5728MacOS\u4e0a\u8fd0\u884cGoogle\u7684Container Structure Tests\u7684\u6280\u672f\u6587\u7ae0\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/\u5c1d\u8bd5\u5728macos\u4e0a\u8fd0\u884cgoogle\u7684container-structure-tests\u3002\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u5c1d\u8bd5\u5728MacOS\u4e0a\u8fd0\u884cGoogle\u7684Container Structure Tests\" \/>\n<meta property=\"og:description\" content=\"\u5173\u4e8e\u5c1d\u8bd5\u5728MacOS\u4e0a\u8fd0\u884cGoogle\u7684Container Structure Tests\u7684\u6280\u672f\u6587\u7ae0\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u5c1d\u8bd5\u5728macos\u4e0a\u8fd0\u884cgoogle\u7684container-structure-tests\u3002\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2024-02-22T17:06:55+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-08-11T17:59:24+00:00\" \/>\n<meta name=\"author\" content=\"\u6587, \u7fd4\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u6587, \u7fd4\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e5%9c%a8macos%e4%b8%8a%e8%bf%90%e8%a1%8cgoogle%e7%9a%84container-structure-tests%e3%80%82\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e5%9c%a8macos%e4%b8%8a%e8%bf%90%e8%a1%8cgoogle%e7%9a%84container-structure-tests%e3%80%82\/\",\"name\":\"\u5c1d\u8bd5\u5728MacOS\u4e0a\u8fd0\u884cGoogle\u7684Container Structure Tests - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2024-02-22T17:06:55+00:00\",\"dateModified\":\"2025-08-11T17:59:24+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/64d5cc7727fffbff2f9a2a8da1de3e5c\"},\"description\":\"\u5173\u4e8e\u5c1d\u8bd5\u5728MacOS\u4e0a\u8fd0\u884cGoogle\u7684Container Structure Tests\u7684\u6280\u672f\u6587\u7ae0\",\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e5%9c%a8macos%e4%b8%8a%e8%bf%90%e8%a1%8cgoogle%e7%9a%84container-structure-tests%e3%80%82\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e5%9c%a8macos%e4%b8%8a%e8%bf%90%e8%a1%8cgoogle%e7%9a%84container-structure-tests%e3%80%82\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e5%9c%a8macos%e4%b8%8a%e8%bf%90%e8%a1%8cgoogle%e7%9a%84container-structure-tests%e3%80%82\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u5c1d\u8bd5\u5728MacOS\u4e0a\u8fd0\u884cGoogle\u7684Container Structure Tests\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/64d5cc7727fffbff2f9a2a8da1de3e5c\",\"name\":\"\u6587, \u7fd4\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g\",\"caption\":\"\u6587, \u7fd4\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/wenxiang\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e5%9c%a8macos%e4%b8%8a%e8%bf%90%e8%a1%8cgoogle%e7%9a%84container-structure-tests%e3%80%82\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u5c1d\u8bd5\u5728MacOS\u4e0a\u8fd0\u884cGoogle\u7684Container Structure Tests - Blog - Silicon Cloud","description":"\u5173\u4e8e\u5c1d\u8bd5\u5728MacOS\u4e0a\u8fd0\u884cGoogle\u7684Container Structure Tests\u7684\u6280\u672f\u6587\u7ae0","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/\u5c1d\u8bd5\u5728macos\u4e0a\u8fd0\u884cgoogle\u7684container-structure-tests\u3002\/","og_locale":"zh_CN","og_type":"article","og_title":"\u5c1d\u8bd5\u5728MacOS\u4e0a\u8fd0\u884cGoogle\u7684Container Structure Tests","og_description":"\u5173\u4e8e\u5c1d\u8bd5\u5728MacOS\u4e0a\u8fd0\u884cGoogle\u7684Container Structure Tests\u7684\u6280\u672f\u6587\u7ae0","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u5c1d\u8bd5\u5728macos\u4e0a\u8fd0\u884cgoogle\u7684container-structure-tests\u3002\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2024-02-22T17:06:55+00:00","article_modified_time":"2025-08-11T17:59:24+00:00","author":"\u6587, \u7fd4","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u6587, \u7fd4","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"1 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e5%9c%a8macos%e4%b8%8a%e8%bf%90%e8%a1%8cgoogle%e7%9a%84container-structure-tests%e3%80%82\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e5%9c%a8macos%e4%b8%8a%e8%bf%90%e8%a1%8cgoogle%e7%9a%84container-structure-tests%e3%80%82\/","name":"\u5c1d\u8bd5\u5728MacOS\u4e0a\u8fd0\u884cGoogle\u7684Container Structure Tests - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2024-02-22T17:06:55+00:00","dateModified":"2025-08-11T17:59:24+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/64d5cc7727fffbff2f9a2a8da1de3e5c"},"description":"\u5173\u4e8e\u5c1d\u8bd5\u5728MacOS\u4e0a\u8fd0\u884cGoogle\u7684Container Structure Tests\u7684\u6280\u672f\u6587\u7ae0","breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e5%9c%a8macos%e4%b8%8a%e8%bf%90%e8%a1%8cgoogle%e7%9a%84container-structure-tests%e3%80%82\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e5%9c%a8macos%e4%b8%8a%e8%bf%90%e8%a1%8cgoogle%e7%9a%84container-structure-tests%e3%80%82\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e5%9c%a8macos%e4%b8%8a%e8%bf%90%e8%a1%8cgoogle%e7%9a%84container-structure-tests%e3%80%82\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u5c1d\u8bd5\u5728MacOS\u4e0a\u8fd0\u884cGoogle\u7684Container Structure Tests"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/64d5cc7727fffbff2f9a2a8da1de3e5c","name":"\u6587, \u7fd4","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g","caption":"\u6587, \u7fd4"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/wenxiang\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e5%9c%a8macos%e4%b8%8a%e8%bf%90%e8%a1%8cgoogle%e7%9a%84container-structure-tests%e3%80%82\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/27313","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=27313"}],"version-history":[{"count":3,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/27313\/revisions"}],"predecessor-version":[{"id":111107,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/27313\/revisions\/111107"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=27313"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=27313"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=27313"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}