mirror of
https://github.com/tiennm99/coolify.git
synced 2026-04-17 17:21:04 +00:00
feat: custom docker entrypoint (#7097)
This commit is contained in:
@@ -962,6 +962,7 @@ function convertDockerRunToCompose(?string $custom_docker_run_options = null)
|
||||
'--shm-size' => 'shm_size',
|
||||
'--gpus' => 'gpus',
|
||||
'--hostname' => 'hostname',
|
||||
'--entrypoint' => 'entrypoint',
|
||||
]);
|
||||
foreach ($matches as $match) {
|
||||
$option = $match[1];
|
||||
@@ -982,6 +983,37 @@ function convertDockerRunToCompose(?string $custom_docker_run_options = null)
|
||||
$options[$option] = array_unique($options[$option]);
|
||||
}
|
||||
}
|
||||
if ($option === '--entrypoint') {
|
||||
// Match --entrypoint=value or --entrypoint value
|
||||
// Handle quoted strings with escaped quotes: --entrypoint "python -c \"print('hi')\""
|
||||
// Pattern matches: double-quoted (with escapes), single-quoted (with escapes), or unquoted values
|
||||
if (preg_match(
|
||||
'/--entrypoint(?:=|\s+)(?<raw>"(?:\\\\.|[^"])*"|\'(?:\\\\.|[^\'])*\'|[^\s]+)/',
|
||||
$custom_docker_run_options,
|
||||
$entrypoint_matches
|
||||
)) {
|
||||
$rawValue = $entrypoint_matches['raw'];
|
||||
// Handle double-quoted strings: strip quotes and unescape special characters
|
||||
if (str_starts_with($rawValue, '"') && str_ends_with($rawValue, '"')) {
|
||||
$inner = substr($rawValue, 1, -1);
|
||||
// Unescape backslash sequences: \" \$ \` \\
|
||||
$value = preg_replace('/\\\\(["$`\\\\])/', '$1', $inner);
|
||||
} elseif (str_starts_with($rawValue, "'") && str_ends_with($rawValue, "'")) {
|
||||
// Handle single-quoted strings: just strip quotes (no unescaping per shell rules)
|
||||
$value = substr($rawValue, 1, -1);
|
||||
} else {
|
||||
// Handle unquoted values
|
||||
$value = $rawValue;
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($value) && trim($value) !== '') {
|
||||
$options[$option][] = $value;
|
||||
$options[$option] = array_values(array_unique($options[$option]));
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
if (isset($match[2]) && $match[2] !== '') {
|
||||
$value = $match[2];
|
||||
$options[$option][] = $value;
|
||||
@@ -1022,6 +1054,12 @@ function convertDockerRunToCompose(?string $custom_docker_run_options = null)
|
||||
if (! is_null($value) && is_array($value) && count($value) > 0 && ! empty(trim($value[0]))) {
|
||||
$compose_options->put($mapping[$option], $value[0]);
|
||||
}
|
||||
} elseif ($option === '--entrypoint') {
|
||||
if (! is_null($value) && is_array($value) && count($value) > 0 && ! empty(trim($value[0]))) {
|
||||
// Docker compose accepts entrypoint as either a string or an array
|
||||
// Keep it as a string for simplicity - docker compose will handle it
|
||||
$compose_options->put($mapping[$option], $value[0]);
|
||||
}
|
||||
} elseif ($option === '--gpus') {
|
||||
$payload = [
|
||||
'driver' => 'nvidia',
|
||||
|
||||
Reference in New Issue
Block a user