amc, aerospike are not recognized inside docker container

366 Views Asked by At

I've docker ubuntu 16.04 image and I'm running aerospike server in it.

$ docker run -d -p 3000:3000 -p 3001:3001 -p 3002:3002 -p 3003:3003  -p 8081:8081  --name aerospike aerospike/aerospike-server

The docker container is running successfully.

$ docker ps
CONTAINER ID        IMAGE                        COMMAND                
CREATED             STATUS              PORTS                                                      
NAMES
b0b4c63d7e22        aerospike/aerospike-server   "/entrypoint.sh asd"        
36 seconds ago      Up 35 seconds       0.0.0.0:3000-3003->3000-3003/tcp, 0.0.0.0:8081->8081/tcp   aerospike

I've logged into the docker container

$ docker exec -it b0b4c63d7e22 bash
root@b0b4c63d7e22:/#

I have listed the directories -

root@b0b4c63d7e22:/# ls
bin  boot  core  dev  entrypoint.sh  etc  home  lib  lib64  media  mnt  opt  
proc  root  run  sbin  srv  sys  tmp  usr  var
root@b0b4c63d7e22:/#

I changed the directory to bin folder and listed the commands

root@b0b4c63d7e22:/# cd bin
root@b0b4c63d7e22:/bin# ls
bash   dnsdomainname  ip          mount          readlink    systemctl                       
touch         zegrep
cat    domainname     journalctl  mountpoint     rm          systemd                         
true          zfgrep
chgrp  echo           kill        mv             rmdir       systemd-ask-
password            umount        zforce
chmod  egrep          ln          netstat        run-parts   systemd-escape                  
uname         zgrep
chown  false          login       networkctl     sed         systemd-inhibit                 
uncompress    zless
cp     fgrep          loginctl    nisdomainname  sh          systemd-machine-
id-setup        vdir          zmore
dash   findmnt        ls          pidof          sh.distrib  systemd-notify                  
wdctl         znew
date   grep           lsblk       ping           sleep       systemd-tmpfiles                
which
dd     gunzip         mkdir       ping6          ss          systemd-tty-ask-
password-agent  ypdomainname
df     gzexe          mknod       ps             stty        tailf                           
zcat
dir    gzip           mktemp      pwd            su          tar                             
zcmp
dmesg  hostname       more        rbash          sync        tempfile                        
zdiff

Then I want to check the service -

root@b0b4c63d7e22:/bin# service amc status
amc: unrecognized service
2

There are 2 best solutions below

0
On

You can build your own Docker container for amc to connect to aerospike running on containers.

Here is a sample Dockerfile for AMC.

cat Dockerfile 

FROM ubuntu:xenial

ENV AMC_VERSION 4.0.13 


# Install AMC server 


RUN \
  apt-get update -y \
  && apt-get install -y wget python python-argparse python-bcrypt python-openssl logrotate net-tools iproute2 iputils-ping \
  && wget "https://www.aerospike.com/artifacts/aerospike-amc-community/${AMC_VERSION}/aerospike-amc-community-${AMC_VERSION}_amd64.deb" -O aerospike-amc.deb \
  && dpkg -i aerospike-amc.deb \
  && apt-get purge -y




# Expose Aerospike ports
#
#   8081 – amc port
#
EXPOSE 8081 

# Execute the run script in foreground mode
ENTRYPOINT ["/opt/amc/amc"]
CMD [" -config-file=/etc/amc/amc.conf -config-dir=/etc/amc"]

#/opt/amc/amc -config-file=/etc/amc/amc.conf -config-dir=/etc/amc

# Docker build sample:
# docker build -t amctest .

# Docker run sample for running amc on port 8081
# docker run -tid --name amc -p 8081:8081 amctest
# and access through http://127.0.0.1:8081

Then you can build the image:

docker build -t amctest .
Sending build context to Docker daemon  50.69kB
Step 1/6 : FROM ubuntu:xenial
 ---> 2fa927b5cdd3
Step 2/6 : ENV AMC_VERSION 4.0.13
 ---> Using cache
 ---> edd6bddfe7ad
Step 3/6 : RUN apt-get update -y   && apt-get install -y wget python python-argparse python-bcrypt python-openssl logrotate net-tools iproute2 iputils-ping   && wget "https://www.aerospike.com/artifacts/aerospike-amc-community/${AMC_VERSION}/aerospike-amc-community-${AMC_VERSION}_amd64.deb" -O aerospike-amc.deb   && dpkg -i aerospike-amc.deb   && apt-get purge -y
 ---> Using cache
 ---> f916199044d8
Step 4/6 : EXPOSE 8081
 ---> Using cache
 ---> 06f7888c1721
Step 5/6 : ENTRYPOINT /opt/amc/amc
 ---> Using cache
 ---> bc39346cd94f
Step 6/6 : CMD  -config-file=/etc/amc/amc.conf -config-dir=/etc/amc
 ---> Using cache
 ---> 8ae4300e7c7c
Successfully built 8ae4300e7c7c
Successfully tagged amctest:latest

and finally run it with port forwarding to port 8081:

docker run -tid --name amc -p 8081:8081 amctest
a07cdd8bf8cec6ba41ce068c01544920136a6905e7a05e9a2c315605f62edfce
0
On

Aerospike's official docker container does not have Aerospike Server running as a daemon, but instead as a foreground process. You can see this in the official github DOCKERFILE.

AMC is not part of Aerospike's Docker Image. It is up to you to run AMC from the environment of your choosing.

Finally, since you have not created a custom aerospike.conf file, Aerospike Server will only respond to clients on the Docker internal network. The -p parameters are not sufficient in itself to expose Aerospike's ports to clients, you'd also need to configure access-address, if you'd want client access from outside of the docker environment. Read more about Aerospike's networking at: https://www.aerospike.com/docs/operations/configure/network/general