Skip to content

Commit ee6f9f5

Browse files
authored
Run container as non-root (#52)
* Run container as non-root * Consolidate a few RUN commands to minimize layers that are created during
1 parent 53a5bff commit ee6f9f5

File tree

2 files changed

+40
-35
lines changed

2 files changed

+40
-35
lines changed

backend/Docker/Dockerfile

+29-26
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,35 @@
1-
#Basic Container
21
FROM alpine:latest
32

4-
#Installing necessary packages
5-
RUN apk add --no-cache bash bash-doc bash-completion
6-
RUN apk add --no-cache musl-dev
7-
RUN apk add --no-cache gfortran
8-
RUN apk add git
9-
RUN apk add wget
3+
# Install system dependencies
4+
RUN apk add --no-cache \
5+
bash \
6+
bash-completion \
7+
bash-doc \
8+
gfortran \
9+
git \
10+
musl-dev \
11+
wget
1012

11-
WORKDIR /fortran
12-
#Fetching FPM from releases
13-
RUN wget https://github.com/fortran-lang/fpm/releases/download/v0.6.0/fpm-0.6.0-linux-x86_64 -4
14-
RUN mv fpm-0.6.0-linux-x86_64 fpm
15-
#Setup for FPM
16-
RUN chmod u+x fpm
17-
RUN mkdir playground
18-
RUN mkdir playground/app
19-
RUN mkdir playground/libraries
13+
# Create a non-root user
14+
RUN adduser -D fortran
15+
USER fortran
16+
WORKDIR /home/fortran
2017

21-
#Fetching libraries
22-
WORKDIR /fortran/playground/libraries
23-
#Setting up stdlib
24-
RUN git clone https://github.com/fortran-lang/stdlib.git
25-
WORKDIR /fortran/playground/libraries/stdlib
26-
RUN git checkout stdlib-fpm
27-
WORKDIR /fortran/playground
28-
COPY fpm.toml /fortran/playground/fpm.toml
29-
COPY main.f90 /fortran/playground/app/main.f90
30-
RUN /fortran/fpm build
18+
# Set up fpm
19+
RUN wget https://github.com/fortran-lang/fpm/releases/download/v0.6.0/fpm-0.6.0-linux-x86_64 -4 -O fpm && \
20+
chmod u+x fpm
21+
RUN mkdir playground && \
22+
mkdir playground/app && \
23+
mkdir playground/libraries
3124

25+
# Fetch libraries
26+
WORKDIR /home/fortran/playground/libraries
3227

28+
# Set up stdlib
29+
RUN git clone https://github.com/fortran-lang/stdlib
30+
WORKDIR /home/fortran/playground/libraries/stdlib
31+
RUN git checkout stdlib-fpm
32+
WORKDIR /home/fortran/playground
33+
COPY fpm.toml /home/fortran/playground/fpm.toml
34+
COPY main.f90 /home/fortran/playground/app/main.f90
35+
RUN /home/fortran/fpm build

backend/app.py

+11-9
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,12 @@
1616

1717
# Starting container
1818
client = docker.from_env()
19-
container = client.containers.run("playground-prod", tty=True, detach=True, network_disabled=True)
19+
container = client.containers.run(
20+
"playground-prod",
21+
tty=True,
22+
detach=True,
23+
network_disabled=True
24+
)
2025

2126
#Converting tutorial YAML
2227
with open('tutorial.yml', 'r') as file:
@@ -63,11 +68,11 @@ def copy_to(src, dst, container):
6368

6469
# Executing code inside container and getting it's output
6570
def execute_code_in_container():
66-
copy_to('./main.f90', '/fortran/playground/app/main.f90', container)
67-
copy_to('./program_input.txt', '/fortran/playground/program_input.txt', container)
68-
copy_to('./fpm.toml','/fortran/playground/fpm.toml', container)
69-
container.exec_run('sh -c "/fortran/fpm build"')
70-
a = container.exec_run('sh -c "cat program_input.txt | timeout 15s /fortran/fpm run"',demux=True)
71+
copy_to('./main.f90', '/home/fortran/playground/app/main.f90', container)
72+
copy_to('./program_input.txt', '/home/fortran/playground/program_input.txt', container)
73+
copy_to('./fpm.toml','/home/fortran/playground/fpm.toml', container)
74+
container.exec_run('sh -c "/home/fortran/fpm build"')
75+
a = container.exec_run('sh -c "cat program_input.txt | timeout 15s /home/fortran/fpm run"',demux=True)
7176

7277
return a
7378

@@ -80,15 +85,12 @@ def run_code():
8085
edit_file(data["code"], data["programInput"], data["libs"])
8186
code_result = execute_code_in_container()
8287
if code_result.output[0] == None:
83-
print(code_result.output)
8488
output = jsonify({"executed": ""})
8589
if '<ERROR>' in code_result.output[1].decode():
8690
output = jsonify({"executed" : code_result.output[1].decode()})
8791

8892
return output, 202
8993
output = jsonify({"executed": code_result.output[0].decode()})
90-
print(code_result.output)
91-
9294

9395
return output, 202
9496

0 commit comments

Comments
 (0)