{"id":1340,"date":"2024-10-16T15:19:25","date_gmt":"2024-10-16T15:19:25","guid":{"rendered":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/2024\/10\/16\/docker-best-practices-using-arg-and-env-in-your-dockerfiles\/"},"modified":"2024-10-16T15:19:25","modified_gmt":"2024-10-16T15:19:25","slug":"docker-best-practices-using-arg-and-env-in-your-dockerfiles","status":"publish","type":"post","link":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/2024\/10\/16\/docker-best-practices-using-arg-and-env-in-your-dockerfiles\/","title":{"rendered":"Docker Best Practices: Using ARG and ENV in Your Dockerfiles"},"content":{"rendered":"<p>If you\u2019ve worked with Docker for any length of time, you\u2019re likely accustomed to writing or at least modifying a <a href=\"https:\/\/docs.docker.com\/build\/concepts\/dockerfile\/\" target=\"_blank\" rel=\"noopener\">Dockerfile<\/a>. This file can be thought of as a recipe for a Docker image; it contains both the ingredients (base images, packages, files) and the instructions (various RUN, COPY, and other commands that help build the image).<\/p>\n<p>In most cases, Dockerfiles are written once, modified seldom, and used as-is unless something about the project changes. Because these files are created or modified on such an infrequent basis, developers tend to rely on only a handful of frequently used instructions \u2014 RUN, COPY, and EXPOSE being the most common. Other instructions can enhance your image, making it more configurable, manageable, and easier to maintain.\u00a0<\/p>\n<p>In this post, we will discuss the ARG and ENV instructions and explore why, how, and when to use them.<\/p>\n<h2 class=\"wp-block-heading\">ARG: Defining build-time variables<\/h2>\n<p>The ARG instruction allows you to define variables that will be accessible during the build stage but not available after the image is built. For example, we will use this Dockerfile to build an image where we make the variable specified by the ARG instruction available during the build process.<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\nFROM ubuntu:latest<br \/>\nARG THEARG=&#8221;foo&#8221;<br \/>\nRUN echo $THEARG<br \/>\nCMD [&#8220;env&#8221;]\n<\/div>\n<p>If we run the build, we will see the echo foo line in the output:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n$ docker build &#8211;no-cache -t argtest .<br \/>\n[+] Building 0.4s (6\/6) FINISHED                                                                     docker:desktop-linux<br \/>\n&lt;&#8211; SNIP &#8211;&gt;<br \/>\n =&gt; CACHED [1\/2] FROM docker.io\/library\/ubuntu:latest@sha256:8a37d68f4f73ebf3d4efafbcf66379bf3728902a8038616808f04e  0.0s<br \/>\n =&gt; =&gt; resolve docker.io\/library\/ubuntu:latest@sha256:8a37d68f4f73ebf3d4efafbcf66379bf3728902a8038616808f04e34a9ab6  0.0s<br \/>\n =&gt; [2\/2] RUN echo foo                                                                                               0.1s<br \/>\n =&gt; exporting to image                                                                                               0.0s<br \/>\n&lt;&#8211; SNIP &#8211;&gt;\n<\/div>\n<p>However, if we run the image and inspect the output of the env command, we do not see THEARG:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n$ docker run &#8211;rm argtest<br \/>\nPATH=\/usr\/local\/sbin:\/usr\/local\/bin:\/usr\/sbin:\/usr\/bin:\/sbin:\/bin<br \/>\nHOSTNAME=d19f59677dcd<br \/>\nHOME=\/root\n<\/div>\n<h2 class=\"wp-block-heading\">ENV: Defining build and runtime variables<\/h2>\n<p>Unlike ARG, the ENV command allows you to define a variable that can be accessed both at build time and run time:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\nFROM ubuntu:latest<br \/>\nENV THEENV=&#8221;bar&#8221;<br \/>\nRUN echo $THEENV<br \/>\nCMD [&#8220;env&#8221;]\n<\/div>\n<p>If we run the build, we will see the echo bar line in the output:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n$ docker build -t envtest .<br \/>\n[+] Building 0.8s (7\/7) FINISHED                                                                     docker:desktop-linux<br \/>\n&lt;&#8211; SNIP &#8211;&gt;<br \/>\n =&gt; CACHED [1\/2] FROM docker.io\/library\/ubuntu:latest@sha256:8a37d68f4f73ebf3d4efafbcf66379bf3728902a8038616808f04e  0.0s<br \/>\n =&gt; =&gt; resolve docker.io\/library\/ubuntu:latest@sha256:8a37d68f4f73ebf3d4efafbcf66379bf3728902a8038616808f04e34a9ab6  0.0s<br \/>\n =&gt; [2\/2] RUN echo bar                                                                                               0.1s<br \/>\n =&gt; exporting to image                                                                                               0.0s<br \/>\n&lt;&#8211; SNIP &#8211;&gt;\n<\/div>\n<p>If we run the image and inspect the output of the env command, we do see THEENV set, as expected:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n$ docker run &#8211;rm envtest<br \/>\nPATH=\/usr\/local\/sbin:\/usr\/local\/bin:\/usr\/sbin:\/usr\/bin:\/sbin:\/bin<br \/>\nHOSTNAME=f53f1d9712a9<br \/>\nTHEENV=bar<br \/>\nHOME=\/root\n<\/div>\n<h2 class=\"wp-block-heading\">Overriding ARG<\/h2>\n<p>A more advanced use of the ARG instruction is to serve as a placeholder that is then updated at build time:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\nFROM ubuntu:latest<br \/>\nARG THEARG<br \/>\nRUN echo $THEARG<br \/>\nCMD [&#8220;env&#8221;]\n<\/div>\n<p>If we build the image, we see that we are missing a value for $THEARG:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n$ docker build -t argtest .<br \/>\n&lt;&#8211; SNIP &#8211;&gt;<br \/>\n =&gt; CACHED [1\/2] FROM docker.io\/library\/ubuntu:latest@sha256:8a37d68f4f73ebf3d4efafbcf66379bf3728902a8038616808f04e  0.0s<br \/>\n =&gt; =&gt; resolve docker.io\/library\/ubuntu:latest@sha256:8a37d68f4f73ebf3d4efafbcf66379bf3728902a8038616808f04e34a9ab6  0.0s<br \/>\n =&gt; [2\/2] RUN echo $THEARG                                                                                           0.1s<br \/>\n =&gt; exporting to image                                                                                               0.0s<br \/>\n =&gt; =&gt; exporting layers                                                                                              0.0s<br \/>\n&lt;&#8211; SNIP &#8211;&gt;\n<\/div>\n<p>However, we can pass a value for THEARG on the build command line using the &#8211;build-arg argument. Notice that we now see THEARG has been replaced with foo in the output:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n =&gt; CACHED [1\/2] FROM docker.io\/library\/ubuntu:latest@sha256:8a37d68f4f73ebf3d4efafbcf66379bf3728902a8038616808f04e  0.0s<br \/>\n =&gt; =&gt; resolve docker.io\/library\/ubuntu:latest@sha256:8a37d68f4f73ebf3d4efafbcf66379bf3728902a8038616808f04e34a9ab6  0.0s<br \/>\n =&gt; [2\/2] RUN echo foo                                                                                               0.1s<br \/>\n =&gt; exporting to image                                                                                               0.0s<br \/>\n =&gt; =&gt; exporting layers                                                                                              0.0s<br \/>\n&lt;&#8211; SNIP &#8211;&gt;\n<\/div>\n<p>The same can be done in a <a href=\"https:\/\/docs.docker.com\/compose\/\" target=\"_blank\" rel=\"noopener\">Docker Compose<\/a> file by using the args key under the build key. Note that these can be set as a mapping (THEARG: foo) or a list (- THEARG=foo):<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\nservices:<br \/>\n  argtest:<br \/>\n    build:<br \/>\n      context: .<br \/>\n      args:<br \/>\n        THEARG: foo\n<\/div>\n<p>If we run docker compose up &#8211;build, we can see the THEARG has been replaced with foo in the output:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n$ docker compose up &#8211;build<br \/>\n&lt;&#8211; SNIP &#8211;&gt;<br \/>\n =&gt; [argtest 1\/2] FROM docker.io\/library\/ubuntu:latest@sha256:8a37d68f4f73ebf3d4efafbcf66379bf3728902a8038616808f04  0.0s<br \/>\n =&gt; =&gt; resolve docker.io\/library\/ubuntu:latest@sha256:8a37d68f4f73ebf3d4efafbcf66379bf3728902a8038616808f04e34a9ab6  0.0s<br \/>\n =&gt; CACHED [argtest 2\/2] RUN echo foo                                                                                0.0s<br \/>\n =&gt; [argtest] exporting to image                                                                                     0.0s<br \/>\n =&gt; =&gt; exporting layers                                                                                              0.0s<br \/>\n&lt;&#8211; SNIP &#8211;&gt;<br \/>\nAttaching to argtest-1<br \/>\nargtest-1  | PATH=\/usr\/local\/sbin:\/usr\/local\/bin:\/usr\/sbin:\/usr\/bin:\/sbin:\/bin<br \/>\nargtest-1  | HOSTNAME=d9a3789ac47a<br \/>\nargtest-1  | HOME=\/root<br \/>\nargtest-1 exited with code 0\n<\/div>\n<h2 class=\"wp-block-heading\">Overriding ENV<\/h2>\n<p>You can also override ENV at build time; this is slightly different from how ARG is overridden. For example, you cannot supply a key without a value with the ENV instruction, as shown in the following example Dockerfile:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\nFROM ubuntu:latest<br \/>\nENV THEENV<br \/>\nRUN echo $THEENV<br \/>\nCMD [&#8220;env&#8221;]\n<\/div>\n<p>When we try to build the image, we receive an error:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n$ docker build -t envtest .<br \/>\n[+] Building 0.0s (1\/1) FINISHED                                                                     docker:desktop-linux<br \/>\n =&gt; [internal] load build definition from Dockerfile                                                                 0.0s<br \/>\n =&gt; =&gt; transferring dockerfile: 98B                                                                                  0.0s<br \/>\nDockerfile:3<br \/>\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\n   1 |     FROM ubuntu:latest<br \/>\n   2 |<br \/>\n   3 | &gt;&gt;&gt; ENV THEENV<br \/>\n   4 |     RUN echo $THEENV<br \/>\n   5 |<br \/>\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\nERROR: failed to solve: ENV must have two arguments\n<\/div>\n<p>However, we can remove the ENV instruction from the Dockerfile:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\nFROM ubuntu:latest<br \/>\nRUN echo $THEENV<br \/>\nCMD [&#8220;env&#8221;]\n<\/div>\n<p>This allows us to build the image:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n$ docker build -t envtest .<br \/>\n&lt;&#8211; SNIP &#8211;&gt;<br \/>\n =&gt; [1\/2] FROM docker.io\/library\/ubuntu:latest@sha256:8a37d68f4f73ebf3d4efafbcf66379bf3728902a8038616808f04e34a9ab6  0.0s<br \/>\n =&gt; =&gt; resolve docker.io\/library\/ubuntu:latest@sha256:8a37d68f4f73ebf3d4efafbcf66379bf3728902a8038616808f04e34a9ab6  0.0s<br \/>\n =&gt; CACHED [2\/2] RUN echo $THEENV                                                                                    0.0s<br \/>\n =&gt; exporting to image                                                                                               0.0s<br \/>\n =&gt; =&gt; exporting layers                                                                                              0.0s<br \/>\n&lt;&#8211; SNIP &#8211;&gt;\n<\/div>\n<p>Then we can pass an environment variable via the docker run command using the -e flag:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n$ docker run &#8211;rm -e THEENV=bar envtest<br \/>\nPATH=\/usr\/local\/sbin:\/usr\/local\/bin:\/usr\/sbin:\/usr\/bin:\/sbin:\/bin<br \/>\nHOSTNAME=638cf682d61f<br \/>\nTHEENV=bar<br \/>\nHOME=\/root\n<\/div>\n<p>Although the .env file is usually associated with Docker Compose, it can also be used with docker run.<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n$ cat .env<br \/>\nTHEENV=bar\n<p>$ docker run &#8211;rm &#8211;env-file .\/.env envtest<br \/>\nPATH=\/usr\/local\/sbin:\/usr\/local\/bin:\/usr\/sbin:\/usr\/bin:\/sbin:\/bin<br \/>\nHOSTNAME=59efe1003811<br \/>\nTHEENV=bar<br \/>\nHOME=\/root\n<\/p><\/div>\n<p>This can also be done using Docker Compose by using the environment key. Note that we use the variable format for the value:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\nservices:<br \/>\n  envtest:<br \/>\n    build:<br \/>\n      context: .<br \/>\n    environment:<br \/>\n      THEENV: ${THEENV}\n<\/div>\n<p>If we do not supply a value for THEENV, a warning is thrown:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n$ docker compose up &#8211;build<br \/>\nWARN[0000] The &#8220;THEENV&#8221; variable is not set. Defaulting to a blank string.<br \/>\n&lt;&#8211; SNIP &#8211;&gt;<br \/>\n =&gt; [envtest 1\/2] FROM docker.io\/library\/ubuntu:latest@sha256:8a37d68f4f73ebf3d4efafbcf66379bf3728902a8038616808f04  0.0s<br \/>\n =&gt; =&gt; resolve docker.io\/library\/ubuntu:latest@sha256:8a37d68f4f73ebf3d4efafbcf66379bf3728902a8038616808f04e34a9ab6  0.0s<br \/>\n =&gt; CACHED [envtest 2\/2] RUN echo ${THEENV}                                                                          0.0s<br \/>\n =&gt; [envtest] exporting to image                                                                                     0.0s<br \/>\n&lt;&#8211; SNIP &#8211;&gt;<br \/>\n \u2714 Container dd-envtest-1    Recreated                                                                               0.1s<br \/>\nAttaching to envtest-1<br \/>\nenvtest-1  | PATH=\/usr\/local\/sbin:\/usr\/local\/bin:\/usr\/sbin:\/usr\/bin:\/sbin:\/bin<br \/>\nenvtest-1  | HOSTNAME=816d164dc067<br \/>\nenvtest-1  | THEENV=<br \/>\nenvtest-1  | HOME=\/root<br \/>\nenvtest-1 exited with code 0\n<\/div>\n<p>The value for our variable can be supplied in several different ways, as follows:<\/p>\n<p><strong>On the compose command line:<\/strong><\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n$ THEENV=bar docker compose up\n<p>[+] Running 2\/0<br \/>\n \u2714 Synchronized File Shares                                                                                          0.0s<br \/>\n \u2714 Container dd-envtest-1    Recreated                                                                               0.1s<br \/>\nAttaching to envtest-1<br \/>\nenvtest-1  | PATH=\/usr\/local\/sbin:\/usr\/local\/bin:\/usr\/sbin:\/usr\/bin:\/sbin:\/bin<br \/>\nenvtest-1  | HOSTNAME=20f67bb40c6a<br \/>\nenvtest-1  | THEENV=bar<br \/>\nenvtest-1  | HOME=\/root<br \/>\nenvtest-1 exited with code 0\n<\/p><\/div>\n<p><strong>In the shell environment on the host system:<\/strong><\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n$ export THEENV=bar<br \/>\n$ docker compose up\n<p>[+] Running 2\/0<br \/>\n \u2714 Synchronized File Shares                                                                                          0.0s<br \/>\n \u2714 Container dd-envtest-1    Created                                                                                 0.0s<br \/>\nAttaching to envtest-1<br \/>\nenvtest-1  | PATH=\/usr\/local\/sbin:\/usr\/local\/bin:\/usr\/sbin:\/usr\/bin:\/sbin:\/bin<br \/>\nenvtest-1  | HOSTNAME=20f67bb40c6a<br \/>\nenvtest-1  | THEENV=bar<br \/>\nenvtest-1  | HOME=\/root<br \/>\nenvtest-1 exited with code 0\n<\/p><\/div>\n<p><strong>In the special .env file:<\/strong><\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n$ cat .env<br \/>\nTHEENV=bar\n<p>$ docker compose up<\/p>\n<p>[+] Running 2\/0<br \/>\n \u2714 Synchronized File Shares                                                                                          0.0s<br \/>\n \u2714 Container dd-envtest-1    Created                                                                                 0.0s<br \/>\nAttaching to envtest-1<br \/>\nenvtest-1  | PATH=\/usr\/local\/sbin:\/usr\/local\/bin:\/usr\/sbin:\/usr\/bin:\/sbin:\/bin<br \/>\nenvtest-1  | HOSTNAME=20f67bb40c6a<br \/>\nenvtest-1  | THEENV=bar<br \/>\nenvtest-1  | HOME=\/root<br \/>\nenvtest-1 exited with code 0\n<\/p><\/div>\n<p>Finally, when running services directly using docker compose run, you can use the -e flag to override the .env file.<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n$ docker compose run -e THEENV=bar envtest\n<p>[+] Creating 1\/0<br \/>\n \u2714 Synchronized File Shares                                                                                          0.0s<br \/>\nPATH=\/usr\/local\/sbin:\/usr\/local\/bin:\/usr\/sbin:\/usr\/bin:\/sbin:\/bin<br \/>\nHOSTNAME=219e96494ddd<br \/>\nTERM=xterm<br \/>\nTHEENV=bar<br \/>\nHOME=\/root\n<\/p><\/div>\n<h2 class=\"wp-block-heading\">The tl;dr<\/h2>\n<p>If you need to access a variable during the build process but not at runtime, use ARG. If you need to access the variable both during the build and at runtime, or only at runtime, use ENV.<\/p>\n<p>To decide between them, consider the following flow (Figure 1):<\/p>\n<p><button class=\"lightbox-trigger\"><\/button><\/p>\n<p>\t\t<\/p>\n<p>Both ARG and ENV can be overridden from the command line in docker run and docker compose, giving you a powerful way to dynamically update variables and build flexible workflows.<\/p>\n<h2 class=\"wp-block-heading\">Learn more<\/h2>\n<p>Discover more <a href=\"https:\/\/www.docker.com\/blog\/tag\/best-practices\/\">Docker Best Practices<\/a>.<\/p>\n<p>Subscribe to the <a href=\"https:\/\/www.docker.com\/newsletter-subscription\/\" target=\"_blank\" rel=\"noopener\">Docker Newsletter<\/a>.\u00a0<\/p>\n<p>Get the latest release of <a href=\"https:\/\/www.docker.com\/products\/docker-desktop\/\" target=\"_blank\" rel=\"noopener\">Docker Desktop<\/a>.<\/p>\n<p>Have questions? The <a href=\"https:\/\/www.docker.com\/community\/\" target=\"_blank\" rel=\"noopener\">Docker community is here to help<\/a>.<\/p>\n<p>New to Docker? <a href=\"https:\/\/docs.docker.com\/desktop\/\" target=\"_blank\" rel=\"noopener\">Get started<\/a>.<\/p>","protected":false},"excerpt":{"rendered":"<p>If you\u2019ve worked with Docker for any length of time, you\u2019re likely accustomed to writing or at least modifying a [&hellip;]<\/p>\n","protected":false},"author":0,"featured_media":0,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[4],"tags":[],"class_list":["post-1340","post","type-post","status-publish","format-standard","hentry","category-docker"],"_links":{"self":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/posts\/1340","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/comments?post=1340"}],"version-history":[{"count":0,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/posts\/1340\/revisions"}],"wp:attachment":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/media?parent=1340"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/categories?post=1340"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/tags?post=1340"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}