[英]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
使用此命令,我可以像往常一樣訪問,但是在運行腳本以提取和壓縮日志文件后,我無法再訪問該容器。
這是第一個故障點,腳本每周運行一次(由 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”(在 Dockerfile 中定義)和“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"
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"]
您可以使用此命令以 root 用戶訪問容器:
docker exec -u 0 -i -t {container_name_or_hash} /bin/bash
嘗試調試。 我認為該腳本可能會刪除或禁用 root 用戶。
此問題是由docker 引擎 bug引起的,但已私下跟蹤,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 論壇說Running docker stop and then docker start fixes the problem but is hardly a long-term solution
docker Running docker stop and then docker start fixes the problem but is hardly a long-term solution
......
docker exec -u 0 -i -t {container_name_or_hash} /bin/bash
解決方案也在@ObranZoltan 在這里提到的同一論壇帖子中可能對您有用,但對許多人不起作用。 請參閱下面的輸出
$ sudo docker exec -u 0 -it berserk_nobel /bin/bash
exec: "/bin/bash": stat /bin/bash: input/output error
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.