volume support. add in subvols, too.

This commit is contained in:
iamBadgers
2026-04-19 18:38:46 -07:00
parent 0b00377f77
commit cd1498a976
2 changed files with 55 additions and 22 deletions

View File

@@ -3,7 +3,7 @@ blinker==1.9.0
certifi==2026.2.25 certifi==2026.2.25
charset-normalizer==3.4.6 charset-normalizer==3.4.6
click==8.3.1 click==8.3.1
docker==7.1.0 docker @ git+https://github.com/docker/docker-py@main
Flask==3.1.3 Flask==3.1.3
idna==3.11 idna==3.11
itsdangerous==2.2.0 itsdangerous==2.2.0

View File

@@ -54,6 +54,8 @@ def start_foundry_container(table: GameTable, key: KeyTable):
client = docker.from_env() client = docker.from_env()
container = None container = None
networkName = client.containers.get(socket.gethostname()).attrs["HostConfig"]["NetworkMode"] networkName = client.containers.get(socket.gethostname()).attrs["HostConfig"]["NetworkMode"]
data_bind = os.environ.get("FOUNDRY_DATA_BIND")
data_volume = os.environ.get("FOUNDRY_DATA_VOL")
if table.docker_id != None and table.docker_id != 0: if table.docker_id != None and table.docker_id != 0:
try: try:
@@ -65,33 +67,64 @@ def start_foundry_container(table: GameTable, key: KeyTable):
container.start() container.start()
else: else:
image = "felddy/foundryvtt:{version}".format(version=table.version)
labels = build_container_routing_labels(table.game_table_link, False)
volumes = {
"{data_bind}/{prefix}".format(
data_bind=os.environ.get("FOUNDRY_DATA_BIND"),
prefix=table.game_table_link,
): {"bind": "/data", "mode": "rw"},
"{data_bind}/container_cache".format(
data_bind=os.environ.get("FOUNDRY_DATA_BIND")
): {"bind": "/data/container_cache", "mode": "rw"},
}
environment = [ environment = [
"FOUNDRY_ROUTE_PREFIX={prefix}".format(prefix=table.game_table_link), "FOUNDRY_ROUTE_PREFIX={prefix}".format(prefix=table.game_table_link),
"FOUNDRY_TELEMETRY=FALSE", "FOUNDRY_TELEMETRY=FALSE",
"FOUNDRY_LICENSE_KEY={key_value}".format(key_value=key.key), "FOUNDRY_LICENSE_KEY={key_value}".format(key_value=key.key),
] ]
ports = {"30000": str(30000 + table.game_table_id)} ports = {"30000": str(30000 + table.game_table_id)}
container = client.containers.run( image = "felddy/foundryvtt:{version}".format(version=table.version)
image=image, labels = build_container_routing_labels(table.game_table_link, False)
labels=labels,
volumes=volumes, if data_volume:
environment=environment,
ports=ports, os.makedirs("/data/{prefix}".format(prefix=table.game_table_link), exist_ok=True)
detach=True,
network=networkName mounts = [
) # docker.types.Mount(
# target="/data",
# source=data_volume,
# type="volume",
# subpath=table.game_table_link),
docker.types.Mount(
target="/data/container_cache",
source=data_volume,
type="volume",
subpath="container_cache")
]
container = client.containers.run(
image=image,
labels=labels,
mounts=mounts,
environment=environment,
ports=ports,
detach=True,
network=networkName
)
else:
volumes = {
"{data_bind}/{prefix}".format(
data_bind=os.environ.get("FOUNDRY_DATA_BIND"),
prefix=table.game_table_link,
): {"bind": "/data", "mode": "rw"},
"{data_bind}/container_cache".format(
data_bind=os.environ.get("FOUNDRY_DATA_BIND")
): {"bind": "/data/container_cache", "mode": "rw"},
}
container = client.containers.run(
image=image,
labels=labels,
volumes=volumes,
environment=environment,
ports=ports,
detach=True,
network=networkName
)
return container.id return container.id