Docker:无法find用户root:在passwd文件中没有匹配的条目

我有多个Atlassian产品的容器; JIRABitbucketConfluence 。 当我试图访问我通常使用的正在运行的容器:

 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" 

Dockerfile的Bitbucket图像:

 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 1.8.0版,build f3628c7
  • 所有容器都在运行,即使Bitbucket在发生问题之后仍然照常运行
  • 容器重新启动后问题消失

您可以使用此命令以root用户身份访问容器:

docker exec -u 0 -i -t {container_name_or_hash} / bin / bash

尝试与此debugging。 我认为脚本可能会删除或禁用root用户。