Skip to content
This repository was archived by the owner on Mar 23, 2026. It is now read-only.

Commit ce9e433

Browse files
authored
Liqun/container permission (#296)
1. change docker file to use root for env preparations 2. add entrypoint.sh to dynamically create the user to run the kernel
2 parents 894db47 + d021dca commit ce9e433

4 files changed

Lines changed: 35 additions & 26 deletions

File tree

docker/ces_container/Dockerfile

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,22 @@ FROM python:3.10-slim
33

44
WORKDIR /app
55

6-
RUN useradd -m taskweaver
7-
8-
# Set the working directory to /app
9-
RUN chown taskweaver:taskweaver /app
10-
11-
USER taskweaver
12-
136
# Copy the requrements file
14-
COPY --chown=taskweaver:taskweaver requirements.txt .
15-
RUN pip install --no-cache-dir --no-warn-script-location --user -r requirements.txt
7+
COPY requirements.txt .
8+
RUN pip install --no-cache-dir --no-warn-script-location -r requirements.txt
169

1710
# TODO: Install additional packages for plugins
1811

1912
# Copy the project code
20-
COPY --chown=taskweaver:taskweaver taskweaver/ces /app/taskweaver/ces
21-
COPY --chown=taskweaver:taskweaver taskweaver/plugin /app/taskweaver/plugin
22-
COPY --chown=taskweaver:taskweaver taskweaver/module /app/taskweaver/module
23-
COPY --chown=taskweaver:taskweaver taskweaver/__init__.py /app/taskweaver/__init__.py
13+
COPY taskweaver/ces /app/taskweaver/ces
14+
COPY taskweaver/plugin /app/taskweaver/plugin
15+
COPY taskweaver/module /app/taskweaver/module
16+
COPY taskweaver/__init__.py /app/taskweaver/__init__.py
17+
COPY docker/ces_container/entrypoint.sh /app/entrypoint.sh
18+
RUN chmod +x /app/entrypoint.sh
2419

2520
ENV PYTHONPATH "${PYTHONPATH}:/app"
2621

27-
CMD ["python", "-m", "taskweaver.ces.kernel.launcher"]
22+
ENTRYPOINT ["/app/entrypoint.sh"]
2823

2924

docker/ces_container/entrypoint.sh

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#!/bin/bash
2+
3+
USER_ID=${TASKWEAVER_UID:-10002}
4+
GROUP_ID=${TASKWEAVER_GID:-10002}
5+
6+
echo "Starting with UID: $USER_ID, GID: $GROUP_ID"
7+
useradd -u $USER_ID -o -m taskweaver
8+
groupmod -g $GROUP_ID taskweaver
9+
10+
chown -R taskweaver:taskweaver /app
11+
12+
su taskweaver -c "python -m taskweaver.ces.kernel.launcher"
13+

scripts/build_executor.ps1

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
$scriptDirectory = $PSScriptRoot
22
Write-Host "The script directory is: $scriptDirectory"
33

4-
$version = "0.1"
4+
$version = "0.2"
55
$imageName = "taskweavercontainers/taskweaver-executor"
66
$imageFullName = "${imageName}:${version}"
77

@@ -23,8 +23,5 @@ docker build -t $imageFullName -f $dockerfilePath $contextPath
2323

2424
# Tag the image
2525
docker tag $imageFullName "${imageName}:latest"
26-
```
2726

28-
# Tag the image
29-
docker tag $imageName taskweavercontainers/taskweaver-executor:latest
3027

taskweaver/ces/environment.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -144,9 +144,13 @@ def __init__(
144144
except docker.errors.DockerException as e:
145145
raise docker.errors.DockerException(f"Failed to connect to Docker daemon: {e}. ")
146146

147-
self.image_name = "taskweavercontainers/taskweaver-executor"
147+
self.image_name = "taskweavercontainers/taskweaver-executor:latest"
148148
try:
149-
self.docker_client.images.get(self.image_name)
149+
local_image = self.docker_client.images.get(self.image_name)
150+
registry_image = self.docker_client.images.get_registry_data(self.image_name)
151+
if local_image.id != registry_image.id:
152+
logger.info(f"Local image {local_image.id} does not match registry image {registry_image.id}.")
153+
raise docker.errors.ImageNotFound("Local image is outdated.")
150154
except docker.errors.ImageNotFound:
151155
logger.info("Pulling image from docker.io.")
152156
try:
@@ -219,11 +223,6 @@ def start_session(
219223
self._cmd_session_init(session)
220224
session.kernel_status = "ready"
221225
elif self.mode == EnvMode.Container:
222-
if platform.system() != "Windows":
223-
# change the permission of the ces and cwd directories
224-
os.chmod(ces_session_dir, 0o755)
225-
os.chmod(cwd, 0o755)
226-
227226
connection_file = self._get_connection_file(session_id, new_kernel_id)
228227
new_port_start = self.port_start_inside_container
229228
kernel_env = {
@@ -235,6 +234,12 @@ def start_session(
235234
"TASKWEAVER_PORT_START": str(new_port_start),
236235
"TASKWEAVER_LOGGING_FILE_PATH": "/app/ces/kernel_logging.log",
237236
}
237+
238+
if platform.system() != "Windows":
239+
# change the permission of the ces and cwd directories
240+
kernel_env["TASKWEAVER_UID"] = str(os.getuid())
241+
kernel_env["TASKWEAVER_GID"] = str(os.getgid())
242+
238243
# ports will be assigned automatically at the host
239244
container = self.docker_client.containers.run(
240245
image=self.image_name,
@@ -251,7 +256,6 @@ def start_session(
251256
f"{new_port_start + 3}/tcp": None,
252257
f"{new_port_start + 4}/tcp": None,
253258
},
254-
user="taskweaver",
255259
)
256260

257261
tick = 0

0 commit comments

Comments
 (0)