{"id":11065,"date":"2018-05-02T14:56:57","date_gmt":"2018-05-02T12:56:57","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/how-uid-mapping-works-in-docker-containers\/"},"modified":"2018-05-02T14:56:57","modified_gmt":"2018-05-02T12:56:57","slug":"how-uid-mapping-works-in-docker-containers","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/how-uid-mapping-works-in-docker-containers\/","title":{"rendered":"How uid mapping works in Docker containers?"},"content":{"rendered":"<p>It can be interesting to see how uids between the docker host and docker containers are mapped. For example, for security concerns.<br \/>\nAs a reminder, docker containers are based on two linux kernel features: <a title=\"linux namespaces\" href=\"https:\/\/en.wikipedia.org\/wiki\/Linux_namespaces\" target=\"_blank\" rel=\"noopener\"> linux namespaces <\/a>and <a title=\"cgroups\" href=\"https:\/\/en.wikipedia.org\/wiki\/Cgroups\" target=\"_blank\" rel=\"noopener\">cgroups<\/a>.<\/p>\n<p>Basically, linux namespaces provide isolation for running processes and cgroups allows you to isolate resource usage.<\/p>\n<p>Let&#8217;s first run a docker container. Here, we will run a mariadb docker in background with -d option<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1; highlight: [5,6]\"> \n[docker@docker1 ~]$ docker run -d -e MYSQL_ROOT_PASSWORD=test123 mariadb\n5c4450939d71814070945f86f9712ba78893417e2342fb48aafced8160cd0d15\n<\/pre>\n<p>Now the container mariadb is running. Let&#8217;s see what is happening on a host level.<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1; highlight: [5,6]\"> \n[docker@docker1 ~]$ ps -ef\nUID        PID  PPID  C STIME TTY          TIME CMD\npolkitd   1729  1718  0 08:14 ?        00:00:00 mysqld\n<\/pre>\n<p>On a container level:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1; highlight: [5,6]\"> \nroot@5c4450939d71:~# ps -ef\nUID        PID  PPID  C STIME TTY          TIME CMD\nmysql        1     0  0 06:14 ?        00:00:00 mysqld\nroot       174     0  0 06:22 pts\/0    00:00:00 bash\n<\/pre>\n<p>On the host level the mysqld process is running by polkitd and on a container level the process is running by mysql. Any ideas?<br \/>\nThis is because the user id (UID) of the mysql user created in mariadb container corresponds to the same UID of the polkitd user on the host.<\/p>\n<p>Let&#8217;s see what is the userid of the mysql user in the mariadb container<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1; highlight: [5,6]\"> \nroot@5c4450939d71:~# id mysql\nuid=999(mysql) gid=999(mysql) groups=999(mysql)\n<\/pre>\n<p>The UID of mysql is 999. On the host:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1; highlight: [5,6]\"> \n[docker@docker1 ~]$ cat \/etc\/passwd | grep 999\npolkitd:x:999:997:User for polkitd:\/:\/sbin\/nologin\n<\/pre>\n<p>We can see that 999 corresponds to the polkitd user id.<\/p>\n<p>How to change this?<\/p>\n<p>Well, this could be a problem because we don&#8217;t want to run docker containers with a system user that we don&#8217;t know.<\/p>\n<p>One solution could be to create a mysql user with a certain UID on the host:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1; highlight: [5,6]\"> \n[root@docker1 ~]# useradd -g mysql -u 1099 -m -r mysql\n<\/pre>\n<p>Then, we modify the user id inside the docker image. To do so, we need to rebuild a new mariadb image \ud83d\ude42<br \/>\nLet&#8217;s first clone the docker mariadb project<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\"> \n[docker@docker1 ~]$ git clone https:\/\/github.com\/docker-library\/mariadb.git\nCloning into 'mariadb'...\nremote: Counting objects: 751, done.\nremote: Compressing objects: 100% (15\/15), done.\nremote: Total 751 (delta 9), reused 18 (delta 8), pack-reused 728\nReceiving objects: 100% (751\/751), 152.38 KiB | 0 bytes\/s, done.\nResolving deltas: 100% (338\/338), done.\n<\/pre>\n<p>We enter the directory of the mariadb version 10.3<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1; highlight: [5,6]\"> \n[docker@docker1 ~]$ cd mariadb\/10.3\/\n<\/pre>\n<p>We need to modify the <a title=\"Dockerfile\" href=\"https:\/\/docs.docker.com\/engine\/reference\/builder\/\" target=\"_blank\" rel=\"noopener\">Dockerfile <\/a>where all instructions are described<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1; highlight: [5]\"> \n[docker@docker1 10.3]$ vi Dockerfile\n<\/pre>\n<p>Change this line<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1; highlight: [5]\"> \n# vim:set ft=dockerfile:\nFROM debian:jessie\n\n# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added\nRUN groupadd -r mysql &amp;&amp; useradd -r -g mysql mysql\n<\/pre>\n<p>To this line<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1; highlight: [5]\"> \n# vim:set ft=dockerfile:\nFROM debian:jessie\n\n# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added\nRUN groupadd -g 1099 -r mysql &amp;&amp; useradd -u 1099 -r -g mysql mysql\n<\/pre>\n<p>We rebuild a new image, let&#8217;s call it mariadbcustom<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1; \"> \n[docker@docker1 10.3]$ docker build -t mariadbcustom:latest .\nSending build context to Docker daemon  13.31kB\nStep 1\/19 : FROM debian:jessie\n ---&gt; 5dd74d62fab8\nStep 2\/19 : RUN groupadd -g 1099 -r mysql &amp;&amp; useradd -u 1099 -r -g mysql mysql\n ---&gt; Using cache\n ---&gt; a285892faa45\nStep 3\/19 : ENV GOSU_VERSION 1.10\n ---&gt; Using cache\n ---&gt; 069252945f7a\nStep 4\/19 : RUN set -ex;                fetchDeps='             ca-certificates                 wget    ';      apt-get update;         apt-get install -y --no-install-recommends $fetchDeps;   rm -rf \/var\/lib\/apt\/lists\/*;            dpkgArch=\"$(dpkg --print-architecture | awk -F- '{ print $NF }')\";      wget -O \/usr\/local\/bin\/gosu \"https:\/\/github.com\/tianon\/gosu\/releases\/download\/$GOSU_VERSION\/gosu-$dpkgArch\";     wget -O \/usr\/local\/bin\/gosu.asc \"https:\/\/github.com\/tianon\/gosu\/releases\/download\/$GOSU_VERSION\/gosu-$dpkgArch.asc\";             export GNUPGHOME=\"$(mktemp -d)\";        gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4;         gpg --batch --verify \/usr\/local\/bin\/gosu.asc \/usr\/local\/bin\/gosu;       rm -r \"$GNUPGHOME\" \/usr\/local\/bin\/gosu.asc;             chmod +x \/usr\/local\/bin\/gosu;    gosu nobody true;               apt-get purge -y --auto-remove $fetchDeps\n ---&gt; Using cache\n ---&gt; c82d4738b781\nStep 5\/19 : RUN mkdir \/docker-entrypoint-initdb.d\n ---&gt; Using cache\n ---&gt; 08acd0843256\nStep 6\/19 : RUN apt-get update &amp;&amp; apt-get install -y --no-install-recommends            apt-transport-https ca-certificates             pwgen   &amp;&amp; rm -rf \/var\/lib\/apt\/lists\/*\n ---&gt; Using cache\n ---&gt; 3ed44a5e3cf5\nStep 7\/19 : ENV GPG_KEYS        199369E5404BD5FC7D2FE43BCBCB082A1BB943DB        430BDF5C56E7C94E848EE60C1C4CBDCDCD2EFD2A        4D1BB29D63D98E422B2113B19334A25F8507EFA5\n ---&gt; Using cache\n ---&gt; b30af869afbb\nStep 8\/19 : RUN set -ex;        export GNUPGHOME=\"$(mktemp -d)\";        for key in $GPG_KEYS; do                gpg --keyserver ha.pool.sks-keyservers.net --recv-keys \"$key\";   done;   gpg --export $GPG_KEYS &gt; \/etc\/apt\/trusted.gpg.d\/mariadb.gpg;    rm -r \"$GNUPGHOME\";     apt-key list\n ---&gt; Using cache\n ---&gt; 7a6e03190271\nStep 9\/19 : RUN echo \"deb https:\/\/repo.percona.com\/apt jessie main\" &gt; \/etc\/apt\/sources.list.d\/percona.list      &amp;&gt; \/etc\/apt\/preferences.d\/percona\n ---&gt; Using cache\n ---&gt; e55705d326a2\nStep 10\/19 : ENV MARIADB_MAJOR 10.3\n ---&gt; Using cache\n ---&gt; bb3bc4adcf42\nStep 11\/19 : ENV MARIADB_VERSION 1:10.3.6+maria~jessie\n ---&gt; Using cache\n ---&gt; 05bb1dc686c8\nStep 12\/19 : RUN echo \"deb http:\/\/ftp.osuosl.org\/pub\/mariadb\/repo\/$MARIADB_MAJOR\/debian jessie main\" &gt; \/etc\/apt\/sources.list.d\/mariadb.list     &amp;&gt; \/etc\/apt\/preferences.d\/mariadb\n ---&gt; Using cache\n ---&gt; 3626c50c8d83\nStep 13\/19 : RUN {              echo \"mariadb-server-$MARIADB_MAJOR\" mysql-server\/root_password password 'unused';              echo \"mariadb-server-$MARIADB_MAJOR\" mysql-server\/root_password_again password 'unused';         } | debconf-set-selections      &amp;&amp; apt-get update       &amp;&amp; apt-get install -y           \"mariadb-server=$MARIADB_VERSION\"                percona-xtrabackup-24           socat   &amp;&amp; rm -rf \/var\/lib\/apt\/lists\/*  &amp;&amp; sed -ri 's\/^users\/#&amp;\/' \/etc\/mysql\/my.cnf \/etc\/mysql\/conf.d\/*        &amp;&amp; rm -rf \/var\/lib\/mysql &amp;&amp; mkdir -p \/var\/lib\/mysql \/var\/run\/mysqld      &amp;&amp; chown -R mysql:mysql \/var\/lib\/mysql \/var\/run\/mysqld  &amp;&amp; chmod 777 \/var\/run\/mysqld    &amp;&amp; find \/etc\/mysql\/ -name '*.cnf' -print0                | xargs -0 grep -lZE '^(bind-address|log)'              | xargs -rt -0 sed -Ei 's\/^(bind-address|log)\/#&amp;\/'      &amp;&amp; echo '[mysqld]nskip-host-cachenskip-name-resolve' &gt; \/etc\/mysql\/conf.d\/docker.cnf\n ---&gt; Using cache\n ---&gt; 7d3d52632798\nStep 14\/19 : VOLUME \/var\/lib\/mysql\n ---&gt; Using cache\n ---&gt; 3880f6c65676\nStep 15\/19 : COPY docker-entrypoint.sh \/usr\/local\/bin\/\n ---&gt; Using cache\n ---&gt; 98aa1e3161c4\nStep 16\/19 : RUN ln -s usr\/local\/bin\/docker-entrypoint.sh \/ # backwards compat\n ---&gt; Using cache\n ---&gt; a5394275c2b2\nStep 17\/19 : ENTRYPOINT [\"docker-entrypoint.sh\"]\n ---&gt; Using cache\n ---&gt; c456c7b34697\nStep 18\/19 : EXPOSE 3306\n ---&gt; Using cache\n ---&gt; 05068b456523\nStep 19\/19 : CMD [\"mysqld\"]\n ---&gt; Using cache\n ---&gt; 5973a27bfd43\nSuccessfully built 5973a27bfd43\nSuccessfully tagged mariadbcustom:latest\n<\/pre>\n<p>Let&#8217;s check our image is here<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1;\"> \n[docker@docker1 10.3]$ docker images\nREPOSITORY          TAG                 IMAGE ID            CREATED             SIZE\nmariadbcustom       latest              5973a27bfd43        8 days ago          403MB\n<\/pre>\n<p>we run a docker container with our new customized image<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1;\"> \n[docker@docker1 10.3]$ docker run -d -e MYSQL_ROOT_PASSWORD=test123 mariadbcustom\n7e344d87c4bc2a9c62298b9ec97aa4a331d8311cb1f077f47fcb673f1b3d8fa7\n<\/pre>\n<p>Let&#8217;s check if the user id was properly initialized to the mysql user<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1;\"> \n[docker@docker1 10.3]$ docker ps\nCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES\n7e344d87c4bc        mariadbcustom       \"docker-entrypoint.s\u2026\"   6 minutes ago       Up 6 minutes        3306\/tcp            hungry_heisenberg\n<\/pre>\n<pre class=\"brush: bash; gutter: true; first-line: 1;\"> \n[docker@docker1 10.3]$ docker exec -it hungry_heisenberg \/bin\/bash\n<\/pre>\n<pre class=\"brush: bash; gutter: true; first-line: 1;highlight: [2]\"> \nroot@7e344d87c4bc:~# id mysql\nuid=1099(mysql) gid=1099(mysql) groups=1099(mysql)\n<\/pre>\n<p>We check also that the mysqld process run on the host as mysql user<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1; highlight: [3]\"> \n[docker@docker1 10.3]$ ps -ef\nUID        PID  PPID  C STIME TTY          TIME CMD\nmysql     2727  2716  2 14:05 ?        00:00:00 mysqld\n<\/pre>\n<p>On the host, we can see that the mysqld process runs as mysql user. Why? Because now the user id of the mysql user existing on the docker container corresponds to the one existing on the host. In this case, the user id is 1099.<\/p>\n<p>Conclusion:<\/p>\n<p>In some use cases you might want to use a specific user to run some process and not using root or whatever user.However, in order to do that you sometimes need to change the Dockerfile or add a specific user on the host.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>It can be interesting to see how uids between the docker host and docker containers are mapped. For example, for security concerns. As a reminder, docker containers are based on two linux kernel features: linux namespaces and cgroups. Basically, linux namespaces provide isolation for running processes and cgroups allows you to isolate resource usage. Let&#8217;s [&hellip;]<\/p>\n","protected":false},"author":28,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[229],"tags":[],"type_dbi":[],"class_list":["post-11065","post","type-post","status-publish","format-standard","hentry","category-database-administration-monitoring"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>How uid mapping works in Docker containers? - dbi Blog<\/title>\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.dbi-services.com\/blog\/how-uid-mapping-works-in-docker-containers\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How uid mapping works in Docker containers?\" \/>\n<meta property=\"og:description\" content=\"It can be interesting to see how uids between the docker host and docker containers are mapped. For example, for security concerns. As a reminder, docker containers are based on two linux kernel features: linux namespaces and cgroups. Basically, linux namespaces provide isolation for running processes and cgroups allows you to isolate resource usage. Let&#8217;s [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/how-uid-mapping-works-in-docker-containers\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-05-02T12:56:57+00:00\" \/>\n<meta name=\"author\" content=\"Open source Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Open source Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/how-uid-mapping-works-in-docker-containers\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/how-uid-mapping-works-in-docker-containers\/\"},\"author\":{\"name\":\"Open source Team\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/59554f0d99383431eb6ed427e338952b\"},\"headline\":\"How uid mapping works in Docker containers?\",\"datePublished\":\"2018-05-02T12:56:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/how-uid-mapping-works-in-docker-containers\/\"},\"wordCount\":427,\"commentCount\":0,\"articleSection\":[\"Database Administration &amp; Monitoring\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/how-uid-mapping-works-in-docker-containers\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/how-uid-mapping-works-in-docker-containers\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/how-uid-mapping-works-in-docker-containers\/\",\"name\":\"How uid mapping works in Docker containers? - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"datePublished\":\"2018-05-02T12:56:57+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/59554f0d99383431eb6ed427e338952b\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/how-uid-mapping-works-in-docker-containers\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/how-uid-mapping-works-in-docker-containers\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/how-uid-mapping-works-in-docker-containers\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How uid mapping works in Docker containers?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/59554f0d99383431eb6ed427e338952b\",\"name\":\"Open source Team\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/eb4fb12e386e8c41fdef0733e8114594cf2653e4f55e9fa2161442b8eaf3f657?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/eb4fb12e386e8c41fdef0733e8114594cf2653e4f55e9fa2161442b8eaf3f657?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/eb4fb12e386e8c41fdef0733e8114594cf2653e4f55e9fa2161442b8eaf3f657?s=96&d=mm&r=g\",\"caption\":\"Open source Team\"},\"url\":\"https:\/\/www.dbi-services.com\/blog\/author\/open-source-team\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"How uid mapping works in Docker containers? - dbi Blog","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.dbi-services.com\/blog\/how-uid-mapping-works-in-docker-containers\/","og_locale":"en_US","og_type":"article","og_title":"How uid mapping works in Docker containers?","og_description":"It can be interesting to see how uids between the docker host and docker containers are mapped. For example, for security concerns. As a reminder, docker containers are based on two linux kernel features: linux namespaces and cgroups. Basically, linux namespaces provide isolation for running processes and cgroups allows you to isolate resource usage. Let&#8217;s [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/how-uid-mapping-works-in-docker-containers\/","og_site_name":"dbi Blog","article_published_time":"2018-05-02T12:56:57+00:00","author":"Open source Team","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Open source Team","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/how-uid-mapping-works-in-docker-containers\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/how-uid-mapping-works-in-docker-containers\/"},"author":{"name":"Open source Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/59554f0d99383431eb6ed427e338952b"},"headline":"How uid mapping works in Docker containers?","datePublished":"2018-05-02T12:56:57+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/how-uid-mapping-works-in-docker-containers\/"},"wordCount":427,"commentCount":0,"articleSection":["Database Administration &amp; Monitoring"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/how-uid-mapping-works-in-docker-containers\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/how-uid-mapping-works-in-docker-containers\/","url":"https:\/\/www.dbi-services.com\/blog\/how-uid-mapping-works-in-docker-containers\/","name":"How uid mapping works in Docker containers? - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2018-05-02T12:56:57+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/59554f0d99383431eb6ed427e338952b"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/how-uid-mapping-works-in-docker-containers\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/how-uid-mapping-works-in-docker-containers\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/how-uid-mapping-works-in-docker-containers\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How uid mapping works in Docker containers?"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/59554f0d99383431eb6ed427e338952b","name":"Open source Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/eb4fb12e386e8c41fdef0733e8114594cf2653e4f55e9fa2161442b8eaf3f657?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/eb4fb12e386e8c41fdef0733e8114594cf2653e4f55e9fa2161442b8eaf3f657?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/eb4fb12e386e8c41fdef0733e8114594cf2653e4f55e9fa2161442b8eaf3f657?s=96&d=mm&r=g","caption":"Open source Team"},"url":"https:\/\/www.dbi-services.com\/blog\/author\/open-source-team\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/11065","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/28"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=11065"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/11065\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=11065"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=11065"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=11065"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=11065"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}