Forums

Articles
Create
cancel
Showing results for 
Search instead for 
Did you mean: 

[Bitbucket Pipelines] docker run doesn't run

slmt
Contributor
April 16, 2018

I'm running the following script from Bitbucket Pipelines:

#!/usr/bin/env bash

set -e

npm i

export docker_tag=${DOCKER_REGISTRY_HOST}/geolite2:latest

# Start Elasticsearch container
mkdir -p ${BITBUCKET_CLONE_DIR}/volumes/elasticsearch/usr/share/elasticsearch/data
docker run -d --rm \
-p 9200:9200 \
-p 9300:9300 \
-e "discovery.type=single-node" \
-v ${BITBUCKET_CLONE_DIR}/volumes/elasticsearch/usr/share/elasticsearch/data:/usr/share/elasticsearch/data \
--name elasticsearch \
docker.elastic.co/elasticsearch/elasticsearch:6.2.3

# Download and unzip GeoLite2 database
curl -sS https://geolite.maxmind.com/download/geoip/database/GeoLite2-City-CSV.zip > geolite2.zip
apt-get update
apt-get -y install unzip
unzip geolite2.zip -d geolite2

# Wait until Elasticsearch is ready
echo "Waiting until Elasticsearch is ready."

for i in {1..99}; do
echo "Elasticsearch health check #${i}..."
curl -sS http://127.0.0.1:9200/_cluster/health?wait_for_status=green > /dev/null && break
docker ps -a
sleep 5
done

curl -sS http://127.0.0.1:9200/_cluster/health?wait_for_status=green > /dev/null || \
(echo "Elasticsearch failed to initialize. Aborting." && exit 1)

# Index GeoLite2 records from CSV file into Elasticsearch
node -e "require('./build/index-geolite2-database')('geolite2/$(ls geolite2)/GeoLite2-City-Blocks-IPv4.csv')"

# Stop Elasticsearch
docker stop elasticsearch

# Build an Elasticsearch GeoLite2 database image
docker build -t ${docker_tag} .

# Publish image to Docker registry
echo "${DOCKER_REGISTRY_PASSWORD}" | docker login -u ${DOCKER_REGISTRY_USERNAME} --password-stdin ${DOCKER_REGISTRY_HOST}
docker push ${docker_tag}

bitbucket-pipelines.yml:

image: node:9.10.0
pipelines:
custom:
Update Docker image:
- step:
name: Index and publish GeoLite2 database
services:
- docker
caches:
- node
script:
- ./build.sh
definitions:
services:
docker:
memory: 2048

The problem is that the Elasticsearch container doesn't seem to start at all. I keep getting the following output in the healthcheck for-loop:

Elasticsearch health check #32...
curl: (7) Failed to connect to 127.0.0.1 port 9200: Connection refused
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

As you can see, docker ps -a shows that no containers are running, nor have any started, which is surprising because I thought that docker run -d would at least wait until the container had started running.

Any idea what I'm doing wrong?

1 answer

0 votes
slmt
Contributor
April 16, 2018

It's a permission issue, and I think it's a Bitbucket Pipelines bug.

I had to do the following right before starting the Elasticsearch container:

chown 1000:1000 ${BITBUCKET_CLONE_DIR}/volumes/elasticsearch/usr/share/elasticsearch/data

Suggest an answer

Log in or Sign up to answer
TAGS
AUG Leaders

Atlassian Community Events