Skip to content

Commit c215fd8

Browse files
author
James Brundage
committed
feat: GQL Container.start.ps1 ( Fixes #12 )
1 parent 70535e8 commit c215fd8

File tree

1 file changed

+70
-0
lines changed

1 file changed

+70
-0
lines changed

Container.start.ps1

+70
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
<#
2+
.SYNOPSIS
3+
Starts the container.
4+
.DESCRIPTION
5+
Starts a container.
6+
7+
This script should be called from the Dockerfile as the ENTRYPOINT (or from within the ENTRYPOINT).
8+
9+
It should be deployed to the root of the container image.
10+
11+
~~~Dockerfile
12+
# Thank you Microsoft! Thank you PowerShell! Thank you Docker!
13+
FROM mcr.microsoft.com/powershell
14+
# Set the shell to PowerShell (thanks again, Docker!)
15+
SHELL ["/bin/pwsh", "-nologo", "-command"]
16+
# Run the initialization script. This will do all remaining initialization in a single layer.
17+
RUN --mount=type=bind,src=./,target=/Initialize ./Initialize/Container.init.ps1
18+
19+
ENTRYPOINT ["pwsh", "-nologo", "-file", "/Container.start.ps1"]
20+
~~~
21+
.NOTES
22+
Did you know that in PowerShell you can 'use' namespaces that do not really exist?
23+
This seems like a nice way to describe a relationship to a container image.
24+
That is why this file is using the namespace 'mcr.microsoft.com/powershell'.
25+
(this does nothing, but most likely will be used in the future)
26+
#>
27+
using namespace 'ghcr.io/powershellweb/gql'
28+
29+
param()
30+
31+
$env:IN_CONTAINER = $true
32+
$PSStyle.OutputRendering = 'Ansi'
33+
34+
$mountedFolders = @(if (Test-Path '/proc/mounts') {
35+
(Select-String "\S+\s(?<p>\S+).+rw?,.+symlinkroot=/mnt/host" "/proc/mounts").Matches.Groups |
36+
Where-Object Name -eq p |
37+
Get-Item -path { $_.Value }
38+
})
39+
40+
if ($mountedFolders) {
41+
"Mounted $($mountedFolders.Length) folders:" | Out-Host
42+
$mountedFolders | Out-Host
43+
}
44+
45+
if ($args) {
46+
# If there are arguments, output them (you could handle them in a more complex way).
47+
"$args" | Out-Host
48+
$global:ContainerStartArguments = @() + $args
49+
50+
#region Custom
51+
52+
#endregion Custom
53+
} else {
54+
# If there are no arguments, see if there is a Microservice.ps1
55+
if (Test-Path './Microservice.ps1') {
56+
# If there is a Microservice.ps1, run it.
57+
. ./Microservice.ps1
58+
}
59+
#region Custom
60+
61+
#endregion Custom
62+
}
63+
64+
# If you want to do something when the container is stopped, you can register an event.
65+
# This can call a script that does some cleanup, or sends a message as the service is exiting.
66+
Register-EngineEvent -SourceIdentifier PowerShell.Exiting -Action {
67+
if (Test-Path '/Container.stop.ps1') {
68+
& /Container.stop.ps1
69+
}
70+
} | Out-Null

0 commit comments

Comments
 (0)