最近在部署 Hyperledger Fabric 2.1 时,全局状态数据库需要用 CouchDB 2.3.1 ,从 hub.docker.com 上下载了官方的 apache/couchdb:2.3.1 镜像,但是运行之后,
发现 CouchDB 容器会报错,然后自动退出。报错如下:
经过定位,发现官方的 apache/couchdb:2.3.1 镜像是基于 Debian 9 制作的,现在实际的部署环境 host OS 是 Centos 7.6 ,二者内核版本相差较大,导致问题,决定重新基于 CentOS 7.6,制作 apache/couchdb:2.3.1镜像。步骤如下:
Step 1: 编译安装 OTP 22.0
ü 官网下载 http://www.erlang.org/downloads OTP 22.0
ü 安装依赖软件
yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel unixODBC-devel libtool libtool-ltdl-devel automake autoconf wxGTK fop java-1.8
ü 解压 OTP 22.0,进入解压后目录
cd otp_src_22.0
./otp_build autoconf
./configure
make
make install
Erlang 默认安装路径为 /usr/local/lib/erlang
Step2: 编译安装 CouchDB 2.3.1
ü 安装依赖软件
yum install autoconf autoconf-archive automake curl-devel help2man js-devel libicu-devel libtool perl-Test-Harness patch
ü 下载CouchDB 2.3.1 ,解压缩,进入解压后目录
cd apache-couchdb-2.3.1
./configure
make release
编译好的bin文件都在路径 /home/apache-couchdb-2.3.1/rel/couchdb 下面,保存好这个文件夹下的所有文件。
ü 启动 CouchDB
./rel/couchdb/bin/couchdb
ü 验证CouchDB是否成功
Step3 编写 Dockerfile
ü 准备容器中需要用到的文件
其中
base image ppc64le/centos 7.6 可以从 hub.docker.com 下载
10-docker-default.ini / docker-entrypoint.sh / vm.args 可以从 x86 容器中拷贝
gosu / gosu.asc 从网上下载
lib64.tar.gz 是将 /usr/lib64/ 打包
将 rel/couchdb 放到 /opt/couchdb/ 下面
ü 编写好的 Dockerfile 如下。
[root@cn04 couchdb-image-build]# cat Dockerfile
FROM ppc64le/centos:7.6.1810
RUN yum install -y apt-transport-https ca-certificates wget curl tar
RUN groupadd -g 5984 -r couchdb
RUN useradd -u 5984 -d /opt/couchdb -g couchdb couchdb
COPY gosu /usr/local/bin/
COPY gosu.asc /usr/local/bin/
RUN gosu nobody true
ADD opt/couchdb/ /opt/couchdb/
RUN rm -rf /opt/couchdb/data /opt/couchdb/var/log; mkdir -p /opt/couchdb/data /opt/couchdb/var/log; chown couchdb:couchdb /opt/couchdb/data /opt/couchdb/var/log; chmod 777 /opt/couchdb/data /opt/couchdb/var/log; find /opt/couchdb \! \( -user couchdb -group couchdb \) -exec chown -f couchdb:couchdb '{}' +; find /opt/couchdb/etc -type d ! -perm 0755 -exec chmod -f 0755 '{}' +; find /opt/couchdb/etc -type f ! -perm 0644 -exec chmod -f 0644 '{}' +; chmod -f 0777 /opt/couchdb/etc/local.d; rm -rf /var/lib/apt/lists/*
COPY 10-docker-default.ini /opt/couchdb/etc/default.d/
COPY vm.args /opt/couchdb/etc/
COPY docker-entrypoint.sh /entrypoint.sh
RUN cd /
RUN chmod 777 entrypoint.sh
COPY lib64.tar.gz /usr/
RUN tar -zxvf /usr/lib64.tar.gz
RUN cd /
ENTRYPOINT ["./entrypoint.sh"]
VOLUME [/opt/couchdb/data]
EXPOSE 4369 5984 9100
CMD ["/opt/couchdb/bin/couchdb"]
运行 docker build . 命令,制作 docker image
Step 4:验证新镜像
使用命令:
docker run -p 5984:5984 -d --name couchdb -v /couchdb:/opt/couchdb/data -e COUCHDB_USER=admin -e COUCHDB_PASSWORD=password apache/couchdb:2.3.1
参考链接:
https://my.oschina.net/zhenggao/blog/3104375
https://my.oschina.net/zhenggao/blog/3126697
https://github.com/apache/couchdb/issues/2044
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞0
添加新评论0 条评论