File: win_Dockerfile_template

package info (click to toggle)
ipyparallel 9.0.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 9,388 kB
  • sloc: python: 22,769; javascript: 267; makefile: 29; sh: 28
file content (54 lines) | stat: -rw-r--r-- 2,700 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# syntax = docker/dockerfile:1.2.1
FROM python:3.12-windowsservercore-ltsc2022
SHELL ["powershell"]

# using docker env doesn't seem to work fully correctly. The environment variable is set in the powershell
# but somehow it is not present during pip install process, which will cause the ipyparallel installation
# to fail. Therefore, we use the SetEnvironmentVariable command (for the machine) to make this 'permanent'.
# See run command below.
ENV IPP_DISABLE_JS=1

# the following env variable values will be 'statically' replaced by the corresponding github workflow script
# if the values aren't replaced the container hosts file isn't changed which is typically no problem in a local
# environment. but it's a necessity for github runners, since the host name resolution inside the container doesn't
# work correctly while trying to register with the ipyparallel controller (for linux runners this isn't an issue)
ENV docker_host_ip   ${docker_host_ip}
ENV docker_host_name ${docker_host_name}

# set IPP_DISABLE_JS=1 and install latest node js version
RUN [System.Environment]::SetEnvironmentVariable('IPP_DISABLE_JS','1', [EnvironmentVariableTarget]::Machine); \
#add the docker host name and ip to the container hosts file (needed for the github runners since the docker host name resolution doesn't work there)
	$hostsfile='C:\Windows\System32\drivers\etc\hosts'; \
	$line=\"$env:docker_host_ip $env:docker_host_name\"; \
	if ($line.Trim().Length -eq 0) { \
		Write-Host 'Environment variables docker_host_[name|ip] not set. Hosts file unchanged!'; \
	} else { \
		Write-Host 'Adapting hosts file '; \
		$h=(Get-Content $hostsfile)+$line; \
		echo $h | out-file -encoding ASCII $hostsfile; \
		type $hostsfile; \
	}

RUN Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'; \
	Write-Host 'Install OpenSSH Server...'; \
	Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0; \
	Write-Host 'Initializing OpenSSH Server...'; \
	Start-Service sshd; \
	Stop-Service sshd


# create ciuser including key pair
RUN Write-Host 'Create user ciuser...';\
	NET USER ciuser /add
USER ciuser
RUN Write-Host 'Create key pair and copy public key...';\
	ssh-keygen -t rsa -N '\"\"' -f $env:USERPROFILE/.ssh/id_rsa; \
	cp $env:USERPROFILE/.ssh/id_rsa.pub $env:USERPROFILE/.ssh/authorized_keys

# switch back to the admin user
USER containeradministrator

# This is apparently the only way to keep the sshd service running.
# Running sshd in the foreground in the context of a user (as it is done for linux), doesn't work under Windows.
# Even if it is started as admin user, errors occur during logon (lack of some system rights)
CMD powershell -NoExit -Command "Start-Service sshd"