{"id":2348,"date":"2016-07-21T11:02:09","date_gmt":"2016-07-21T11:02:08","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2348"},"modified":"2025-06-13T23:03:41","modified_gmt":"2025-06-14T06:03:41","slug":"create-couchbase-docker-images-testcontainers","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/create-couchbase-docker-images-testcontainers\/","title":{"rendered":"Create Couchbase Docker Images on the Fly with TestContainers"},"content":{"rendered":"<p>Yesterday I wrote about <a href=\"unit-integration-tests-couchbase-docker-container\">how to do unit and integration tests with Couchbase and TestContainers<\/a>. One of the prerequisite for those tests was to have an image already built. Turns out you don&#8217;t have too. You can use TestContainers to build your own custom images just before running your tests and it is super easy. Thanks to <a href=\"https:\/\/twitter.com\/bsideup\">Sergei Egorov<\/a> for showing me the way!<\/p>\n<h2>Creating Images on the Fly<\/h2>\n<p>In the previous example an image would be instanciated with the following code:<\/p>\n<pre><code>    @ClassRule\r\n    public static GenericContainer couchbase =\r\n            new GenericContainer(\"mycouchbase:latest\")\r\n                    .withExposedPorts(8091, 8092, 8093, 8094, 11207, 11210, 11211, 18091, 18092, 18093)\r\n                    .waitingFor(new CouchbaseWaitStrategy());\r\n<\/code><\/pre>\n<p>The GenericContainer constructor would just take a String as parameter. That String being the name of the container you want to test. But the GenericContainer constructor also accepts a Future. Which happens to be what the ImageFromDockerfile class is. The <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/install\/deploy-with-docker-hub.html?utm_source=blogs&amp;utm_medium=link&amp;utm_campaign=blogs\">Docker<\/a> image will be created asynchronously with the parameters you will give.<\/p>\n<p>Here I have copied all I needed into the resources folder of my project, which make them all accessible form the classpath. This is why I use the <code>withFileFromClasspath<\/code> method. You can also get a File from a String, an absolute path or a file. You&#8217;ll find more informations about this on <a href=\"https:\/\/testcontainers.viewdocs.io\/testcontainers-java\/usage\/dockerfile\/\">TestContainers documentation<\/a>.<\/p>\n<pre><code>@ClassRule\r\npublic static GenericContainer couchbase =\r\n        new GenericContainer(\r\n                new ImageFromDockerfile().withFileFromClasspath(\"Dockerfile\", \"Dockerfile\")\r\n                        .withFileFromClasspath(\"scripts\/dummy.sh\",\"scripts\/dummy.sh\")\r\n                        .withFileFromClasspath(\"scripts\/entrypoint.sh\",\"scripts\/entrypoint.sh\")\r\n                        .withFileFromClasspath(\"scripts\/run\",\"scripts\/run\")\r\n               )\r\n                .withExposedPorts(8091, 8092, 8093, 8094, 11207, 11210, 11211, 18091, 18092, 18093)\r\n                .waitingFor(new CouchbaseWaitStrategy());\r\n<\/code><\/pre>\n<p>And with that, your Docker image will be built automatically before running your tests. By default the images are deleted on exit but you can pass a flag to keep the images and avoid rebuilding them all the time. It really depends on your testing strategy.<\/p>\n<h2>Troubleshooting<\/h2>\n<p>While writing this I encountered a minor issue. All the resources that were used for the image creation lost their permissions, so I had to add a <code>RUN chmod +x<\/code> on all the resources I copy in the Dockerfile. This is now a known issue and the lovely and reactive people behind TestContainer are working on this. You can have a chat with them on <a href=\"https:\/\/testcontainers.slack.com\/\">their Slack channel<\/a>, just like you can have a chat with Couchbase folks on our <a href=\"https:\/\/couchbase-community.slack.com\/\">community channel<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Yesterday I wrote about how to do unit and integration tests with Couchbase and TestContainers. One of the prerequisite for those tests was to have an image already built. Turns out you don&#8217;t have too. You can use TestContainers to [&hellip;]<\/p>\n","protected":false},"author":49,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1815],"tags":[1519,1877],"ppma_author":[9023],"class_list":["post-2348","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-best-practices-and-tutorials","tag-docker","tag-testing"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.9 (Yoast SEO v25.9) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>TestContainers: Build Docker Images on the Fly | Couchbase<\/title>\n<meta name=\"description\" content=\"You don\u2019t need an image already built for unit and integration tests. Use Couchbase and TestContainers to create your own images. It is super easy!\" \/>\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.couchbase.com\/blog\/create-couchbase-docker-images-testcontainers\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Create Couchbase Docker Images on the Fly with TestContainers\" \/>\n<meta property=\"og:description\" content=\"You don\u2019t need an image already built for unit and integration tests. Use Couchbase and TestContainers to create your own images. It is super easy!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/create-couchbase-docker-images-testcontainers\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2016-07-21T11:02:08+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T06:03:41+00:00\" \/>\n<meta name=\"author\" content=\"Laurent Doguin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@ldoguin\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"unstructured.io\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/create-couchbase-docker-images-testcontainers\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/create-couchbase-docker-images-testcontainers\/\"},\"author\":{\"name\":\"Laurent Doguin\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c0aa9b8f1ed51b7a9e2f7cb755994a5e\"},\"headline\":\"Create Couchbase Docker Images on the Fly with TestContainers\",\"datePublished\":\"2016-07-21T11:02:08+00:00\",\"dateModified\":\"2025-06-14T06:03:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/create-couchbase-docker-images-testcontainers\/\"},\"wordCount\":324,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/create-couchbase-docker-images-testcontainers\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"docker\",\"testing\"],\"articleSection\":[\"Best Practices and Tutorials\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/create-couchbase-docker-images-testcontainers\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/create-couchbase-docker-images-testcontainers\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/create-couchbase-docker-images-testcontainers\/\",\"name\":\"TestContainers: Build Docker Images on the Fly | Couchbase\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/create-couchbase-docker-images-testcontainers\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/create-couchbase-docker-images-testcontainers\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2016-07-21T11:02:08+00:00\",\"dateModified\":\"2025-06-14T06:03:41+00:00\",\"description\":\"You don\u2019t need an image already built for unit and integration tests. Use Couchbase and TestContainers to create your own images. It is super easy!\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/create-couchbase-docker-images-testcontainers\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/create-couchbase-docker-images-testcontainers\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/create-couchbase-docker-images-testcontainers\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/create-couchbase-docker-images-testcontainers\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Create Couchbase Docker Images on the Fly with TestContainers\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c0aa9b8f1ed51b7a9e2f7cb755994a5e\",\"name\":\"Laurent Doguin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/12929ce99397769f362b7a90d6b85071\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g\",\"caption\":\"Laurent Doguin\"},\"description\":\"Laurent is a nerdy metal head who lives in Paris. He mostly writes code in Java and structured text in AsciiDoc, and often talks about data, reactive programming and other buzzwordy stuff. He is also a former Developer Advocate for Clever Cloud and Nuxeo where he devoted his time and expertise to helping those communities grow bigger and stronger. He now runs Developer Relations at Couchbase.\",\"sameAs\":[\"https:\/\/x.com\/ldoguin\"],\"honorificPrefix\":\"Mr\",\"birthDate\":\"1985-06-07\",\"gender\":\"male\",\"award\":[\"Devoxx Champion\",\"Couchbase Legend\"],\"knowsAbout\":[\"Java\"],\"knowsLanguage\":[\"English\",\"French\"],\"jobTitle\":\"Director Developer Relation & Strategy\",\"worksFor\":\"Couchbase\",\"url\":\"https:\/\/www.couchbase.com\/blog\/author\/laurent-doguin\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"TestContainers: Build Docker Images on the Fly | Couchbase","description":"You don\u2019t need an image already built for unit and integration tests. Use Couchbase and TestContainers to create your own images. It is super easy!","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.couchbase.com\/blog\/create-couchbase-docker-images-testcontainers\/","og_locale":"en_US","og_type":"article","og_title":"Create Couchbase Docker Images on the Fly with TestContainers","og_description":"You don\u2019t need an image already built for unit and integration tests. Use Couchbase and TestContainers to create your own images. It is super easy!","og_url":"https:\/\/www.couchbase.com\/blog\/create-couchbase-docker-images-testcontainers\/","og_site_name":"The Couchbase Blog","article_published_time":"2016-07-21T11:02:08+00:00","article_modified_time":"2025-06-14T06:03:41+00:00","author":"Laurent Doguin","twitter_card":"summary_large_image","twitter_creator":"@ldoguin","twitter_misc":{"Written by":"unstructured.io","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/create-couchbase-docker-images-testcontainers\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/create-couchbase-docker-images-testcontainers\/"},"author":{"name":"Laurent Doguin","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c0aa9b8f1ed51b7a9e2f7cb755994a5e"},"headline":"Create Couchbase Docker Images on the Fly with TestContainers","datePublished":"2016-07-21T11:02:08+00:00","dateModified":"2025-06-14T06:03:41+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/create-couchbase-docker-images-testcontainers\/"},"wordCount":324,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/create-couchbase-docker-images-testcontainers\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["docker","testing"],"articleSection":["Best Practices and Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/create-couchbase-docker-images-testcontainers\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/create-couchbase-docker-images-testcontainers\/","url":"https:\/\/www.couchbase.com\/blog\/create-couchbase-docker-images-testcontainers\/","name":"TestContainers: Build Docker Images on the Fly | Couchbase","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/create-couchbase-docker-images-testcontainers\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/create-couchbase-docker-images-testcontainers\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2016-07-21T11:02:08+00:00","dateModified":"2025-06-14T06:03:41+00:00","description":"You don\u2019t need an image already built for unit and integration tests. Use Couchbase and TestContainers to create your own images. It is super easy!","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/create-couchbase-docker-images-testcontainers\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/create-couchbase-docker-images-testcontainers\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/create-couchbase-docker-images-testcontainers\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/create-couchbase-docker-images-testcontainers\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Create Couchbase Docker Images on the Fly with TestContainers"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"The Couchbase Blog","description":"Couchbase, the NoSQL Database","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"The Couchbase Blog","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c0aa9b8f1ed51b7a9e2f7cb755994a5e","name":"Laurent Doguin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/12929ce99397769f362b7a90d6b85071","url":"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g","caption":"Laurent Doguin"},"description":"Laurent is a nerdy metal head who lives in Paris. He mostly writes code in Java and structured text in AsciiDoc, and often talks about data, reactive programming and other buzzwordy stuff. He is also a former Developer Advocate for Clever Cloud and Nuxeo where he devoted his time and expertise to helping those communities grow bigger and stronger. He now runs Developer Relations at Couchbase.","sameAs":["https:\/\/x.com\/ldoguin"],"honorificPrefix":"Mr","birthDate":"1985-06-07","gender":"male","award":["Devoxx Champion","Couchbase Legend"],"knowsAbout":["Java"],"knowsLanguage":["English","French"],"jobTitle":"Director Developer Relation & Strategy","worksFor":"Couchbase","url":"https:\/\/www.couchbase.com\/blog\/author\/laurent-doguin\/"}]}},"authors":[{"term_id":9023,"user_id":49,"is_guest":0,"slug":"laurent-doguin","display_name":"Laurent Doguin","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/b8c466908092b46634af916b6921f30187a051e4367ded7ac9b1a3f2c5692fd2?s=96&d=mm&r=g","author_category":"","last_name":"Doguin","first_name":"Laurent","job_title":"","user_url":"","description":"Laurent is a nerdy metal head who lives in Paris. He mostly writes code in Java and structured text in AsciiDoc, and often talks about data, reactive programming and other buzzwordy stuff. He is also a former Developer Advocate for Clever Cloud and Nuxeo where he devoted his time and expertise to helping those communities grow bigger and stronger. He now runs Developer Relations at Couchbase."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/2348","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/users\/49"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=2348"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/2348\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media?parent=2348"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=2348"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=2348"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=2348"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}