Skip to content

Commit 1e3e56e

Browse files
committed
start docker as non-root
1 parent 2ed3311 commit 1e3e56e

12 files changed

Lines changed: 51 additions & 28 deletions

File tree

examples/ojs/main.tf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ resource "random_shuffle" "zone" {
44
}
55

66
module "production" {
7-
source = "git::https://github.com/libops/cloud-compose?ref=0.3.0"
7+
source = "git::https://github.com/libops/cloud-compose?ref=0.4.0"
88

99
name = "ojs-production"
1010
project_id = var.project_id
@@ -18,7 +18,7 @@ module "production" {
1818
}
1919

2020
module "staging" {
21-
source = "git::https://github.com/libops/cloud-compose?ref=0.3.0"
21+
source = "git::https://github.com/libops/cloud-compose?ref=0.4.0"
2222

2323
name = "ojs-staging"
2424
project_id = var.project_id

examples/ojs/terraform.tfvars

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
1-
docker_compose_repo = "https://github.com/libops/ojs"
2-
docker_compose_init = "docker compose up init"
1+
docker_compose_repo = "https://github.com/libops/ojs"
2+
docker_compose_init = [
3+
"docker compose run init"
4+
]

main.tf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -456,7 +456,7 @@ EOT
456456
project_id = var.project_id
457457
zone = var.zone
458458
name = var.name
459-
usePrivateIp = "true"
459+
usePrivateIp = true
460460
}
461461
allowed_ips = tolist([
462462
"127.0.0.1/32",
@@ -490,7 +490,7 @@ module "ppb" {
490490
containers = tolist([
491491
{
492492
name = "proxy-power-button",
493-
image = "us-docker.pkg.dev/libops-images/public/ppb:main",
493+
image = "us-docker.pkg.dev/libops-images/public/ppb:main@sha256:fc550f487fc8ab651dd5fa58399f862a58b706222aef75c3834ec5ff44f7ea1b",
494494
cpu = "1000m"
495495
memory = "1Gi",
496496
port = 8080

rootfs/etc/systemd/system/cloud-compose.service

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
[Unit]
22
Description=Docker Compose Application
3-
StartLimitIntervalSec=120
4-
StartLimitBurst=3
3+
PartOf=docker.service
4+
After=docker.service
55

66
[Service]
7+
User=cloud-compose
8+
Group=cloud-compose
79
EnvironmentFile=/home/cloud-compose/.env
810
ExecStart=/mnt/disks/data/up
911
ExecStop=/mnt/disks/data/down

rootfs/etc/systemd/system/internal-services.service

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ StartLimitIntervalSec=120
88
StartLimitBurst=3
99

1010
[Service]
11+
User=cloud-compose
12+
Group=cloud-compose
1113
Environment="HOME=/home/cloud-compose"
1214
WorkingDirectory=/mnt/disks/data/libops-internal
13-
ExecStartPre=/bin/bash /home/cloud-compose/rotate-keys-internal.sh
14-
ExecStartPre=/usr/bin/test -f /mnt/disks/data/libops-internal/GOOGLE_APPLICATION_CREDENTIALS
1515
ExecStart=/usr/bin/docker compose up
1616
ExecStop=/usr/bin/docker compose down
1717
Restart=on-failure

rootfs/home/cloud-compose/app-init.sh

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,19 @@ set -eou pipefail
66
source /home/cloud-compose/profile.sh
77
export HOME
88

9+
git config --global --add safe.directory "$DOCKER_COMPOSE_DIR"
10+
911
if [ ! -d "$DOCKER_COMPOSE_DIR" ]; then
10-
mkdir -p "$DOCKER_COMPOSE_DIR"
1112
echo "Directory '$DOCKER_COMPOSE_DIR' not found. Cloning repository."
12-
retry_until_success git clone -b "$DOCKER_COMPOSE_BRANCH" "$DOCKER_COMPOSE_REPO" "$DOCKER_COMPOSE_DIR"
13+
mkdir -p "$DOCKER_COMPOSE_DIR"
14+
pushd "$DOCKER_COMPOSE_DIR"
15+
retry_until_success git clone -b "$DOCKER_COMPOSE_BRANCH" "$DOCKER_COMPOSE_REPO" .
16+
chown -R cloud-compose:cloud-compose .
17+
else
18+
pushd "$DOCKER_COMPOSE_DIR"
19+
retry_until_success git pull origin "$DOCKER_COMPOSE_BRANCH"
1320
fi
1421

15-
pushd "$DOCKER_COMPOSE_DIR"
16-
retry_until_success git pull origin "$DOCKER_COMPOSE_BRANCH"
1722
# set COMPOSE_PROJECT_NAME from value set in cloud-compose
1823
# sourced from /home/cloud-compose/profile.sh which loads /home/cloud-compose/.env
1924
update_env COMPOSE_PROJECT_NAME "$COMPOSE_PROJECT_NAME"

rootfs/home/cloud-compose/host-conf.sh

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
set -eou pipefail
44

5+
# shellcheck disable=SC1091
6+
source /home/cloud-compose/profile.sh
7+
58
# block metadata server from docker and non-root
69
/sbin/iptables -I FORWARD -d 169.254.169.254/32 -i docker0 -j DROP
710
/sbin/iptables -A OUTPUT -m owner ! --uid-owner 0 -d 169.254.169.254/32 -p tcp --dport 80 -j DROP
@@ -11,28 +14,27 @@ systemctl restart fluent-bit
1114
systemctl restart docker
1215

1316
# wait until our data-root /etc/docker/daemon.json setting are applied
14-
until test -d /mnt/disks/data/docker/volumes; do
15-
echo "Waiting for docker volumes dir"
17+
until test -d /mnt/disks/data/docker/overlay2; do
18+
echo "Waiting for docker overlay2 dir"
1619
sleep 1
1720
done
1821

19-
# move volumes from docker's data root to our volumes disk
20-
rm -rf /mnt/disks/data/docker/volumes
21-
ln -s /mnt/disks/volumes /mnt/disks/data/docker/volumes
22+
if [ ! -d /home/cloud-compose/.docker/cli-plugins ]; then
23+
mkdir -p /home/cloud-compose/.docker/cli-plugins
24+
fi
2225

2326
# since COS is read only FS, install docker compose/buildx in home directory
2427
# and symlink to our data disk which can have executables
2528
if [ ! -f "/home/cloud-compose/.docker/cli-plugins/docker-compose" ]; then
26-
curl -sSL \
29+
retry_until_success curl -sSL \
2730
https://github.com/docker/compose/releases/download/v2.40.3/docker-compose-linux-x86_64 \
2831
-o /mnt/disks/data/docker-compose
2932
chmod o+x /mnt/disks/data/docker-compose
30-
mkdir -p /home/cloud-compose/.docker/cli-plugins
3133
ln -sf /mnt/disks/data/docker-compose /home/cloud-compose/.docker/cli-plugins/docker-compose
3234
fi
3335

3436
if [ ! -f "/home/cloud-compose/.docker/cli-plugins/docker-buildx" ]; then
35-
curl -sSL \
37+
retry_until_success curl -sSL \
3638
https://github.com/docker/buildx/releases/download/v0.30.1/buildx-v0.30.1.linux-amd64 \
3739
-o /mnt/disks/data/docker-buildx
3840
chmod o+x /mnt/disks/data/docker-buildx

rootfs/home/cloud-compose/host-init.sh

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,8 @@ curl -sf \
2727
if ! diff <(md5sum .env.tmp) <(md5sum .env); then
2828
mv .env.tmp .env
2929
cp .env /mnt/disks/data/libops-internal/
30+
chown cloud-compose /mnt/disks/data/libops-internal/.env
3031
fi
32+
33+
chown -R cloud-compose:cloud-compose /home/cloud-compose
34+
usermod -aG docker cloud-compose

rootfs/home/cloud-compose/rotate-keys-app.sh

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,14 @@ pushd /home/cloud-compose
88
source /home/cloud-compose/profile.sh
99

1010
if [ ! -d "$DOCKER_COMPOSE_DIR/secrets" ]; then
11-
mkdir "$DOCKER_COMPOSE_DIR/secrets"
11+
mkdir -p "$DOCKER_COMPOSE_DIR/secrets"
1212
fi
1313

1414
bash rotate-keys.sh \
1515
"$GCP_INSTANCE_NAME@$GCP_PROJECT.iam.gserviceaccount.com" \
1616
"$GCP_PROJECT" \
1717
"$DOCKER_COMPOSE_DIR/secrets/GOOGLE_APPLICATION_CREDENTIALS"
1818

19+
chgrp cloud-compose "$DOCKER_COMPOSE_DIR/secrets/GOOGLE_APPLICATION_CREDENTIALS"
20+
1921
popd

rootfs/home/cloud-compose/rotate-keys-internal.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,6 @@ bash rotate-keys.sh \
1212
"$GCP_PROJECT" \
1313
/mnt/disks/data/libops-internal/GOOGLE_APPLICATION_CREDENTIALS
1414

15+
chgrp cloud-compose /mnt/disks/data/libops-internal/GOOGLE_APPLICATION_CREDENTIALS
16+
1517
popd

0 commit comments

Comments
 (0)