无法找到用户 root:Docker 中的密码文件中没有匹配的条目
Unable to find user root: no matching entries in passwd file in Docker
我有多个 Atlassian 产品的容器; JIRA
、Bitbucket
和 Confluence
。当我尝试访问 运行 容器时,我通常使用:
docker exec -it -u root ${DOCKER_CONTAINER} bash
使用这个命令我可以像往常一样访问,但是在 运行 一个提取和压缩日志文件的脚本之后,我不能再访问那个容器了。
摘自'clean up script'
这是第一个失败点,脚本是每周运行一次(由Jenkins 安排)。
docker cp ${CLEAN_UP_SCRIPT} ${DOCKER_CONTAINER}:/tmp/${CLEAN_UP_SCRIPT}
if [ $? -eq 0 ]; then
docker exec -it -u root ${DOCKER_CONTAINER} bash -c "cd ${LOG_DIR} && /tmp/compressOldLogs.sh ${ARCHIVE_FILE}"
fi
当脚本向 Bitbucket 容器执行这两行时,结果是:
unable to find user root: no matching entries in passwd file
'docker cp'-命令失败,但仅限于 Bitbucket 容器。在脚本具有 运行 之后,'bitbucket'(在 Docker 文件中定义)和 'root' 用户都无法访问容器。
我能够从容器中复制 /etc/passwd
,它包含预期的所有用户。尝试通过 uid 访问时,出现以下错误:
rpc error: code = 2 desc = oci runtime error: exec failed: process_linux.go:75: starting setns process caused "fork/exec /proc/self/exe: no such file or directory"
DockerBitbucket 图片文件:
FROM java:openjdk-8-jre
ENV BITBUCKET_HOME /var/atlassian/application-data/bitbucket
ENV BITBUCKET_INSTALL_DIR /opt/atlassian/bitbucket
ENV BITBUCKET_VERSION 4.12.0
ENV DOWNLOAD_URL https://downloads.atlassian.com/software/stash/downloads/atlassian-bitbucket-${BITBUCKET_VERSION}.tar.gz
ARG user=bitbucket
ARG group=bitbucket
ARG uid=1000
ARG gid=1000
RUN mkdir -p $(dirname $BITBUCKET_HOME) \
&& groupadd -g ${gid} ${group} \
&& useradd -d "$BITBUCKET_HOME" -u ${uid} -g ${gid} -m -s /bin/bash ${user}
RUN mkdir -p ${BITBUCKET_HOME} \
&& mkdir -p ${BITBUCKET_HOME}/shared \
&& chmod -R 700 ${BITBUCKET_HOME} \
&& chown -R ${user}:${group} ${BITBUCKET_HOME} \
&& mkdir -p ${BITBUCKET_INSTALL_DIR}/conf/Catalina \
&& curl -L --silent ${DOWNLOAD_URL} | tar -xz --strip=1 -C "$BITBUCKET_INSTALL_DIR" \
&& chmod -R 700 ${BITBUCKET_INSTALL_DIR}/ \
&& chown -R ${user}:${group} ${BITBUCKET_INSTALL_DIR}/
${BITBUCKET_INSTALL_DIR}/bin/setenv.sh
USER ${user}:${group}
EXPOSE 7990
EXPOSE 7999
WORKDIR $BITBUCKET_INSTALL_DIR
CMD ["bin/start-bitbucket.sh", "-fg"]
附加信息:
- Docker 版本 1.12.0,构建 8eab29e
- docker-compose version 1.8.0, build f3628c7
- 所有容器始终运行,即使 Bitbucket 在问题发生后也照常工作
- 重启容器后问题消失
您可以使用此命令以 root 用户访问容器:
docker exec -u 0 -i -t {container_name_or_hash} /bin/bash
尝试用它进行调试。我认为该脚本可能会删除或禁用 root 用户。
此问题是由 docker 引擎错误引起的 但 私下跟踪 ,Docker 是要求用户重启引擎!
看来这个bug很可能是两年多了!
https://forums.docker.com/t/unable-to-find-user-root-no-matching-entries-in-passwd-file/26545/7
...我能说什么,有人正在尽最大努力获得更多资金。
这是一个长期存在的问题,在我的旧版本 1.10.3 上复制到至少 1.17
如@sorin 所述,docker forum 表示 Running docker stop and then docker start fixes the problem but is hardly a long-term solution
...
@ObranZoltan 在此处提到的同一论坛 post 中的 docker exec -u 0 -i -t {container_name_or_hash} /bin/bash
解决方案可能对您有用,但对很多人都不起作用。请参阅下面的输出
$ sudo docker exec -u 0 -it berserk_nobel /bin/bash
exec: "/bin/bash": stat /bin/bash: input/output error
我有多个 Atlassian 产品的容器; JIRA
、Bitbucket
和 Confluence
。当我尝试访问 运行 容器时,我通常使用:
docker exec -it -u root ${DOCKER_CONTAINER} bash
使用这个命令我可以像往常一样访问,但是在 运行 一个提取和压缩日志文件的脚本之后,我不能再访问那个容器了。
摘自'clean up script'
这是第一个失败点,脚本是每周运行一次(由Jenkins 安排)。
docker cp ${CLEAN_UP_SCRIPT} ${DOCKER_CONTAINER}:/tmp/${CLEAN_UP_SCRIPT}
if [ $? -eq 0 ]; then
docker exec -it -u root ${DOCKER_CONTAINER} bash -c "cd ${LOG_DIR} && /tmp/compressOldLogs.sh ${ARCHIVE_FILE}"
fi
当脚本向 Bitbucket 容器执行这两行时,结果是:
unable to find user root: no matching entries in passwd file
'docker cp'-命令失败,但仅限于 Bitbucket 容器。在脚本具有 运行 之后,'bitbucket'(在 Docker 文件中定义)和 'root' 用户都无法访问容器。
我能够从容器中复制 /etc/passwd
,它包含预期的所有用户。尝试通过 uid 访问时,出现以下错误:
rpc error: code = 2 desc = oci runtime error: exec failed: process_linux.go:75: starting setns process caused "fork/exec /proc/self/exe: no such file or directory"
DockerBitbucket 图片文件:
FROM java:openjdk-8-jre
ENV BITBUCKET_HOME /var/atlassian/application-data/bitbucket
ENV BITBUCKET_INSTALL_DIR /opt/atlassian/bitbucket
ENV BITBUCKET_VERSION 4.12.0
ENV DOWNLOAD_URL https://downloads.atlassian.com/software/stash/downloads/atlassian-bitbucket-${BITBUCKET_VERSION}.tar.gz
ARG user=bitbucket
ARG group=bitbucket
ARG uid=1000
ARG gid=1000
RUN mkdir -p $(dirname $BITBUCKET_HOME) \
&& groupadd -g ${gid} ${group} \
&& useradd -d "$BITBUCKET_HOME" -u ${uid} -g ${gid} -m -s /bin/bash ${user}
RUN mkdir -p ${BITBUCKET_HOME} \
&& mkdir -p ${BITBUCKET_HOME}/shared \
&& chmod -R 700 ${BITBUCKET_HOME} \
&& chown -R ${user}:${group} ${BITBUCKET_HOME} \
&& mkdir -p ${BITBUCKET_INSTALL_DIR}/conf/Catalina \
&& curl -L --silent ${DOWNLOAD_URL} | tar -xz --strip=1 -C "$BITBUCKET_INSTALL_DIR" \
&& chmod -R 700 ${BITBUCKET_INSTALL_DIR}/ \
&& chown -R ${user}:${group} ${BITBUCKET_INSTALL_DIR}/
${BITBUCKET_INSTALL_DIR}/bin/setenv.sh
USER ${user}:${group}
EXPOSE 7990
EXPOSE 7999
WORKDIR $BITBUCKET_INSTALL_DIR
CMD ["bin/start-bitbucket.sh", "-fg"]
附加信息:
- Docker 版本 1.12.0,构建 8eab29e
- docker-compose version 1.8.0, build f3628c7
- 所有容器始终运行,即使 Bitbucket 在问题发生后也照常工作
- 重启容器后问题消失
您可以使用此命令以 root 用户访问容器:
docker exec -u 0 -i -t {container_name_or_hash} /bin/bash
尝试用它进行调试。我认为该脚本可能会删除或禁用 root 用户。
此问题是由 docker 引擎错误引起的 但 私下跟踪 ,Docker 是要求用户重启引擎!
看来这个bug很可能是两年多了!
https://forums.docker.com/t/unable-to-find-user-root-no-matching-entries-in-passwd-file/26545/7
...我能说什么,有人正在尽最大努力获得更多资金。
这是一个长期存在的问题,在我的旧版本 1.10.3 上复制到至少 1.17
如@sorin 所述,docker forum 表示 Running docker stop and then docker start fixes the problem but is hardly a long-term solution
...
@ObranZoltan 在此处提到的同一论坛 post 中的 docker exec -u 0 -i -t {container_name_or_hash} /bin/bash
解决方案可能对您有用,但对很多人都不起作用。请参阅下面的输出
$ sudo docker exec -u 0 -it berserk_nobel /bin/bash
exec: "/bin/bash": stat /bin/bash: input/output error