【问题标题】:Ambari 2.2 - exiting with non-zero status code on Ubuntu 14.04 Docker containerAmbari 2.2 - 在 Ubuntu 14.04 Docker 容器上以非零状态码退出
【发布时间】:2016-01-18 02:09:37
【问题描述】:

TL;DR - Ubuntu 14.04 Docker 容器上的 Dockerized Ambari 在使用默认配置启动时抛出错误

我正在尝试 Dockerize 一个 Ambari 部署,以支持在我的 Hadoop 容器旁边运行它。这是我的 Dockerfile:

FROM ubuntu:14.04

ENV AMBARI_HOME /opt/ambari
ENV AMBARI_VERSION 2.2.0.0

RUN export DEBIAN_FRONTEND=noninteractive \
    && apt-get update \
    && apt-get -y install wget software-properties-common python-software-properties openssh-client openssh-server

# Install Java.
RUN \
  echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | debconf-set-selections && \
  add-apt-repository -y ppa:webupd8team/java && \
  apt-get update && \
  apt-get install -y oracle-java8-installer && \
  rm -rf /var/lib/apt/lists/* && \
  rm -rf /var/cache/oracle-jdk8-installer

# Define commonly used JAVA_HOME variable
ENV JAVA_HOME /usr/lib/jvm/java-8-oracle

RUN mkdir -p "$AMBARI_HOME"
WORKDIR $AMBARI_HOME

# passwordless ssh
RUN export DEBIAN_FRONTEND=noninteractive \
    && echo -e 'y\n'|ssh-keygen -q -t rsa -N "" -f /root/.ssh/id_rsa \
    && cp /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys

RUN export DEBIAN_FRONTEND=noninteractive \
    && wget -nv http://public-repo-1.hortonworks.com/ambari/ubuntu14/2.x/updates/2.2.0.0/ambari.list -O /etc/apt/sources.list.d/ambari.list \
    && apt-key adv --recv-keys --keyserver keyserver.ubuntu.com B9733A7A07513CAD \
    && apt-get update \
    && apt-get -y install ambari-server

#Disable SELinux
RUN echo SELINUX=disabled >> /etc/selinux/config

EXPOSE 8080

RUN ambari-server setup -s --verbose --java-home $JAVA_HOME
CMD ambari-server start

当我启动容器时,我收到以下错误 -

Using python  /usr/bin/python2
Starting ambari-server
Ambari Server running with administrator privileges.
About to start PostgreSQL
Organizing resource files at /var/lib/ambari-server/resources...
WARNING: setpgid(73, 0) failed - [Errno 13] Permission denied
Server PID at: /var/run/ambari-server/ambari-server.pid
Server out at: /var/log/ambari-server/ambari-server.out
Server log at: /var/log/ambari-server/ambari-server.log
Waiting for server start.........
ERROR: Exiting with exit code -1.
REASON: Ambari Server java process died with exitcode -1. Check /var/log/ambari-server/ambari-server.out for more information.

ambari-server.log 或 .out 中似乎没有任何有用的东西

我发现WARNING: setpgid(73, 0) failed - [Errno 13] Permission denied 的问题已在此处修复:setpgid issue

通过阅读用于部署到 Ubuntu 14.04 的 HortonWorks 文档,这应该可以:

Install Ambari on Ubuntu 14.04

我尝试使用嵌入式 Postges 以及具有相同结果的外部 Postges 进行部署。

一个有趣的注意事项是,即使出现错误,Ambari 似乎已启动,我可以以默认管理员/管理员身份登录,但是当调用 `ambari-server stop' 时,它说没有进程正在运行...

root@3e6d778b43f8:/opt/ambari# ambari-server stop
Using python  /usr/bin/python2
Stopping ambari-server
Ambari Server is not running
root@3e6d778b43f8:/opt/ambari# jps
868 AmbariServer
955 Jps

我明天会在我的 Ubuntu 机器上复制这个设置,看看是否会发生同样的事情。

谢谢!

编辑#1:docker info

vagrant@vagrant-ubuntu-trusty-64:/vagrant/scripts$ docker info
Containers: 14
Images: 161
Server Version: 1.9.1
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Backing Filesystem: extfs
 Dirs: 189
 Dirperm1 Supported: false
Execution Driver: native-0.2
Logging Driver: json-file
Kernel Version: 3.13.0-44-generic
Operating System: Ubuntu 14.04.1 LTS
CPUs: 1
Total Memory: 3.861 GiB
Name: vagrant-ubuntu-trusty-64
ID: 7AD6:Z5TH:76NW:G54B:IHVK:PWKP:E2LI:CRPI:MIGM:STJU:3D2B:K7EQ
WARNING: No swap limit support

vagrant@vagrant-ubuntu-trusty-64:/vagrant/scripts$ docker version
Client:
 Version:      1.9.1
 API version:  1.21
 Go version:   go1.4.2
 Git commit:   a34a1d5
 Built:        Fri Nov 20 13:12:04 UTC 2015
 OS/Arch:      linux/amd64

Server:
 Version:      1.9.1
 API version:  1.21
 Go version:   go1.4.2
 Git commit:   a34a1d5
 Built:        Fri Nov 20 13:12:04 UTC 2015
 OS/Arch:      linux/amd64

docker 在 Vagrant Virtualbox 实例 (v1.8.1) 中运行

【问题讨论】:

  • 我也去了 2.1.2.1 版本 - pid 警告消失了,但仍然出现非零代码。
  • 你能把docker versiondocker info的输出加起来吗?您使用的是overlay 存储驱动程序吗?
  • 哦,可能不相关..我刚刚看到了指向 setpgid 问题的链接
  • 这是我用来在主机上安装 docker 和 docker-compose 的脚本(为了保持一致性,它也是 Ubuntu 14.04 LTS):
  • 这里没有好的建议,但我完全没有使用 Ambari 的经验(读到这里,我不太喜欢在一个容器中放这么多东西,但这只是个人喜好)。 aufs 和某些内核版本存在一个已知问题,这会导致 (JAVA) 进程死锁。有一个补丁,但它还没有合并到上游的 Ubuntu 内核中; github.com/docker/docker/issues/18180。但是,我认为这个问题出在较新的内核上(顺便说一句,你的内核和 ubuntu 看起来已经过时了)

标签: apache hadoop docker ambari


【解决方案1】:

我在 ubuntu 14.04 上的 docker 内的 ambari-server 遇到了同样的问题。你可以试试下面的

解决 aufs 问题

在/etc/default/docker里面添加

DOCKER_OPTS="--storage-driver=devicemapper"

并重新启动 docker 服务。请注意,在此之后您的所有图像都会消失 (http://muehe.org/posts/switching-docker-from-aufs-to-devicemapper/)。重建你的图像。

说实话,我不能 100% 确定这部分是否真的需要。

从 aufs 切换到 devicemapper 后,您可能会收到以下错误:

ERROR: Could not find container for entity id

解决方案是删除旧的 AUFS 数据库和任何现有容器:

sudo rm -rf /var/lib/docker/containers/*
sudo rm -rf /var/lib/docker/linkgraph.db

现在应该可以在 devicemapper 引擎上重新启动您的 docker 图像/容器。

将 apparmor 置于 docker 投诉模式

/etc/apparmor.d/docker 内注释掉(#)行deny @{PROC}/{*,**^[0-9*],sys/kernel/shm*} wkx,,它以某种方式混淆了apparmor 实用程序。比跑

sudo aa-complain /etc/apparmor.d/docker

如果 aa-complain 抛出未找到命令,请安装:

sudo apt-get install apparmor-utils

启动容器后,ambari-server 开始为我工作。

我不知道 docker 在这里是如何依赖 apparmor 的,即上面的操作引入了什么风险......

【讨论】:

  • 我可以使用上面的docker文件还是Horton工作?你用的是哪张图片?
  • 我从一个裸露的 ubuntu docker 镜像开始,配置 ssh 服务器以在其中运行并尝试手动安装 hortonworks(即在 ssh 会话中,两个独立的主容器和从容器)。我还没有尝试过您的 docker 文件(只是偶然发现了与您完全相同的问题)
  • 我分叉了 hortonworks Ambari ambari-server 镜像:github.com/mikeblum/docker-ambari
【解决方案2】:

似乎将 Ambari 部署到 docker 容器时出现问题。我将其破解并使用以下脚本将其安装到 Vagrant 14.04 Ubuntu VM 上:

install_java.sh

#!/bin/bash

echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | debconf-set-selections && \
  add-apt-repository -y ppa:webupd8team/java && \
  apt-get update && \
  apt-get install -y oracle-java8-installer && \
  rm -rf /var/lib/apt/lists/* && \
  rm -rf /var/cache/oracle-jdk8-installer

install_ambari.sh

#!/bin/bash

export DEBIAN_FRONTEND=noninteractive \
    && wget -nv http://public-repo-1.hortonworks.com/ambari/ubuntu14/2.x/updates/2.2.0.0/ambari.list -O /etc/apt/sources.list.d/ambari.list \
    && apt-key adv --recv-keys --keyserver keyserver.ubuntu.com B9733A7A07513CAD \
    && apt-get update \
    && apt-get -y install ambari-server

接着是:

sudo ambari-server setup -s -v -j $JAVA_HOME

sudo ambari-server start -v

@thaJeztah - 我的 Dockerfile 设置需要解决什么问题?

【讨论】:

  • 好吧,我尝试了 dockerfile,我注意到了一件事; ambari-server 是一个 python 脚本,它启动 amberi 服务器,然后退出。鉴于该脚本是容器的主要进程,一旦ambari-server start 命令完成,容器就会停止;服务器正在运行,但由于包装脚本已完成,容器停止。要解决这个问题,您可能需要将服务器本身用作主进程,或者使用 init 脚本(例如 supervisord、tini)
  • 这是有道理的——比如在 Dockerfile 的末尾运行 CMD ['bash']?有没有办法(docker-style)来消除来自 ambari 服务器启动的 -1 错误,这样容器就不会死掉?
  • 我真的不知道;我还没有检查 actual 服务器命令是什么是 python 脚本启动的;您应该检查它是否能够在前台运行,但这只有在 only 进程运行时才有效。如果您喜欢能够覆盖命令,还可以查看例如官方 MySQL 映像的 entryoint 脚本; github.com/docker-library/mysql/blob/…
  • 谢谢!我继续为 Ambari 分叉了 Hortonworks Dockerfile,并且可以复制 -1 错误代码/僵尸 Java 进程:github.com/sequenceiq/docker-ambari/blob/master/ambari-server/… 我认为它最有可能与僵尸进程的 GitHub 问题有关:github.com/docker/docker/issues/18180。我会尝试做mysql在这里做的......我对CentOS一无所知......
  • 啊,这可以说明问题;如果你使用的是 boot2docker,你可以试试 release-candidate; github.com/tianon/boot2docker-legacy/releases/tag/v1.10.0-rc1 应用了 aufs 补丁。否则切换到另一个图形驱动程序(例如覆盖)可以解决问题
猜你喜欢
  • 2015-04-30
  • 1970-01-01
  • 1970-01-01
  • 2015-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-14
  • 2022-06-21
相关资源
最近更新 更多