mirror of
https://github.com/1Panel-dev/1Panel.git
synced 2025-01-31 22:18:07 +08:00
fix: 容器创建增加 entrypoint 参数 (#2217)
This commit is contained in:
parent
ad8bf09034
commit
9a43b52c62
@ -45,6 +45,7 @@ type ContainerOperate struct {
|
|||||||
PublishAllPorts bool `json:"publishAllPorts"`
|
PublishAllPorts bool `json:"publishAllPorts"`
|
||||||
ExposedPorts []PortHelper `json:"exposedPorts"`
|
ExposedPorts []PortHelper `json:"exposedPorts"`
|
||||||
Cmd []string `json:"cmd"`
|
Cmd []string `json:"cmd"`
|
||||||
|
Entrypoint []string `json:"entrypoint"`
|
||||||
CPUShares int64 `json:"cpuShares"`
|
CPUShares int64 `json:"cpuShares"`
|
||||||
NanoCPUs float64 `json:"nanoCPUs"`
|
NanoCPUs float64 `json:"nanoCPUs"`
|
||||||
Memory float64 `json:"memory"`
|
Memory float64 `json:"memory"`
|
||||||
|
@ -366,6 +366,7 @@ func (u *ContainerService) ContainerInfo(req dto.OperationWithName) (*dto.Contai
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
data.Cmd = oldContainer.Config.Cmd
|
data.Cmd = oldContainer.Config.Cmd
|
||||||
|
data.Entrypoint = oldContainer.Config.Entrypoint
|
||||||
data.Env = oldContainer.Config.Env
|
data.Env = oldContainer.Config.Env
|
||||||
data.CPUShares = oldContainer.HostConfig.CPUShares
|
data.CPUShares = oldContainer.HostConfig.CPUShares
|
||||||
for key, val := range oldContainer.Config.Labels {
|
for key, val := range oldContainer.Config.Labels {
|
||||||
@ -842,6 +843,7 @@ func loadConfigInfo(req dto.ContainerOperate, config *container.Config, hostConf
|
|||||||
}
|
}
|
||||||
config.Image = req.Image
|
config.Image = req.Image
|
||||||
config.Cmd = req.Cmd
|
config.Cmd = req.Cmd
|
||||||
|
config.Entrypoint = req.Entrypoint
|
||||||
config.Env = req.Env
|
config.Env = req.Env
|
||||||
config.Labels = stringsToMap(req.Labels)
|
config.Labels = stringsToMap(req.Labels)
|
||||||
config.ExposedPorts = exposeds
|
config.ExposedPorts = exposeds
|
||||||
|
@ -23,8 +23,10 @@ export namespace Container {
|
|||||||
forcePull: boolean;
|
forcePull: boolean;
|
||||||
network: string;
|
network: string;
|
||||||
cmdStr: string;
|
cmdStr: string;
|
||||||
|
entrypointStr: string;
|
||||||
memoryItem: number;
|
memoryItem: number;
|
||||||
cmd: Array<string>;
|
cmd: Array<string>;
|
||||||
|
entrypoint: Array<string>;
|
||||||
publishAllPorts: boolean;
|
publishAllPorts: boolean;
|
||||||
exposedPorts: Array<Port>;
|
exposedPorts: Array<Port>;
|
||||||
nanoCPUs: number;
|
nanoCPUs: number;
|
||||||
|
@ -543,8 +543,8 @@ const message = {
|
|||||||
containerExample: 'e.g. 80 or 80-88',
|
containerExample: 'e.g. 80 or 80-88',
|
||||||
exposePort: 'Expose port',
|
exposePort: 'Expose port',
|
||||||
exposeAll: 'Expose all',
|
exposeAll: 'Expose all',
|
||||||
cmd: 'Command',
|
cmdHelper: "e.g. 'nginx' '-g' 'daemon off;' OR nginx -g daemon off;",
|
||||||
cmdHelper: "Separate multiple commands with ' ' as delimiter, such as 'nginx' '-g' 'daemon off;'",
|
entrypointHelper: 'e.g. /bin/sh -c',
|
||||||
autoRemove: 'Auto remove',
|
autoRemove: 'Auto remove',
|
||||||
cpuQuota: 'NacosCPU',
|
cpuQuota: 'NacosCPU',
|
||||||
memoryLimit: 'Memory',
|
memoryLimit: 'Memory',
|
||||||
|
@ -527,8 +527,8 @@ const message = {
|
|||||||
containerExample: '例: 80 或者 80-88',
|
containerExample: '例: 80 或者 80-88',
|
||||||
exposePort: '暴露端口',
|
exposePort: '暴露端口',
|
||||||
exposeAll: '暴露所有',
|
exposeAll: '暴露所有',
|
||||||
cmd: '啟動命令',
|
cmdHelper: "例: 'nginx' '-g' 'daemon off;' 或 nginx -g daemon off;",
|
||||||
cmdHelper: "多個命令間請用 ' ' 分隔開,如 'nginx' '-g' 'daemon off;'",
|
entrypointHelper: '例: /bin/sh -c',
|
||||||
autoRemove: '容器退出後自動刪除容器',
|
autoRemove: '容器退出後自動刪除容器',
|
||||||
cpuQuota: 'CPU 限製',
|
cpuQuota: 'CPU 限製',
|
||||||
memoryLimit: '內存限製',
|
memoryLimit: '內存限製',
|
||||||
|
@ -527,8 +527,8 @@ const message = {
|
|||||||
containerExample: '例: 80 或者 80-88',
|
containerExample: '例: 80 或者 80-88',
|
||||||
exposePort: '暴露端口',
|
exposePort: '暴露端口',
|
||||||
exposeAll: '暴露所有',
|
exposeAll: '暴露所有',
|
||||||
cmd: '启动命令',
|
cmdHelper: "例: 'nginx' '-g' 'daemon off;' 或者 nginx -g daemon off;",
|
||||||
cmdHelper: "多个命令间请用 ' ' 分隔开,如 'nginx' '-g' 'daemon off;'",
|
entrypointHelper: '例: /bin/sh -c',
|
||||||
autoRemove: '容器退出后自动删除容器',
|
autoRemove: '容器退出后自动删除容器',
|
||||||
cpuQuota: 'CPU 限制',
|
cpuQuota: 'CPU 限制',
|
||||||
memoryLimit: '内存限制',
|
memoryLimit: '内存限制',
|
||||||
|
@ -109,39 +109,6 @@
|
|||||||
/>
|
/>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="$t('container.cmd')" prop="cmdStr">
|
|
||||||
<el-input v-model="dialogData.rowData!.cmdStr" />
|
|
||||||
<span class="input-help">{{ $t('container.cmdHelper') }}</span>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item prop="autoRemove">
|
|
||||||
<el-checkbox v-model="dialogData.rowData!.autoRemove">
|
|
||||||
{{ $t('container.autoRemove') }}
|
|
||||||
</el-checkbox>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item :label="$t('container.cpuShare')" prop="cpuShares">
|
|
||||||
<el-input class="mini-form-item" v-model.number="dialogData.rowData!.cpuShares" />
|
|
||||||
<span class="input-help">{{ $t('container.cpuShareHelper') }}</span>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item
|
|
||||||
:label="$t('container.cpuQuota')"
|
|
||||||
prop="nanoCPUs"
|
|
||||||
:rules="checkFloatNumberRange(0, Number(limits.cpu))"
|
|
||||||
>
|
|
||||||
<el-input class="mini-form-item" v-model="dialogData.rowData!.nanoCPUs">
|
|
||||||
<template #append>
|
|
||||||
<div style="width: 35px">{{ $t('commons.units.core') }}</div>
|
|
||||||
</template>
|
|
||||||
</el-input>
|
|
||||||
<span class="input-help">
|
|
||||||
{{ $t('container.limitHelper', [limits.cpu]) }}{{ $t('commons.units.core') }}
|
|
||||||
</span>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item :label="$t('container.memoryLimit')" prop="memory">
|
|
||||||
<el-input class="mini-form-item" v-model="dialogData.rowData!.memory">
|
|
||||||
<template #append><div style="width: 35px">MB</div></template>
|
|
||||||
</el-input>
|
|
||||||
<span class="input-help">{{ $t('container.limitHelper', [limits.memory]) }}MB</span>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item :label="$t('container.mount')">
|
<el-form-item :label="$t('container.mount')">
|
||||||
<el-card style="width: 100%">
|
<el-card style="width: 100%">
|
||||||
<table style="width: 100%" class="tab-table">
|
<table style="width: 100%" class="tab-table">
|
||||||
@ -167,12 +134,14 @@
|
|||||||
filterable
|
filterable
|
||||||
v-model="row.sourceDir"
|
v-model="row.sourceDir"
|
||||||
>
|
>
|
||||||
<el-option
|
<div v-for="(item, indexV) of volumes" :key="indexV">
|
||||||
v-for="(item, indexV) of volumes"
|
<el-tooltip :hide-after="20" :content="item.option" placement="top">
|
||||||
:key="indexV"
|
<el-option
|
||||||
:value="item.option"
|
:value="item.option"
|
||||||
:label="item.option.substring(0, 12)"
|
:label="item.option.substring(0, 12)"
|
||||||
/>
|
/>
|
||||||
|
</el-tooltip>
|
||||||
|
</div>
|
||||||
</el-select>
|
</el-select>
|
||||||
</td>
|
</td>
|
||||||
<td width="18%">
|
<td width="18%">
|
||||||
@ -200,6 +169,52 @@
|
|||||||
</table>
|
</table>
|
||||||
</el-card>
|
</el-card>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-form-item label="Command" prop="cmdStr">
|
||||||
|
<el-input v-model="dialogData.rowData!.cmdStr" :placeholder="$t('container.cmdHelper')" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="Entrypoint" prop="entrypoint">
|
||||||
|
<el-input
|
||||||
|
v-model="dialogData.rowData!.entrypointStr"
|
||||||
|
:placeholder="$t('container.entrypointHelper')"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item prop="autoRemove">
|
||||||
|
<el-checkbox v-model="dialogData.rowData!.autoRemove">
|
||||||
|
{{ $t('container.autoRemove') }}
|
||||||
|
</el-checkbox>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item :label="$t('container.restartPolicy')" prop="restartPolicy">
|
||||||
|
<el-radio-group v-model="dialogData.rowData!.restartPolicy">
|
||||||
|
<el-radio label="no">{{ $t('container.no') }}</el-radio>
|
||||||
|
<el-radio label="always">{{ $t('container.always') }}</el-radio>
|
||||||
|
<el-radio label="on-failure">{{ $t('container.onFailure') }}</el-radio>
|
||||||
|
<el-radio label="unless-stopped">{{ $t('container.unlessStopped') }}</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item :label="$t('container.cpuShare')" prop="cpuShares">
|
||||||
|
<el-input class="mini-form-item" v-model.number="dialogData.rowData!.cpuShares" />
|
||||||
|
<span class="input-help">{{ $t('container.cpuShareHelper') }}</span>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item
|
||||||
|
:label="$t('container.cpuQuota')"
|
||||||
|
prop="nanoCPUs"
|
||||||
|
:rules="checkFloatNumberRange(0, Number(limits.cpu))"
|
||||||
|
>
|
||||||
|
<el-input class="mini-form-item" v-model="dialogData.rowData!.nanoCPUs">
|
||||||
|
<template #append>
|
||||||
|
<div style="width: 35px">{{ $t('commons.units.core') }}</div>
|
||||||
|
</template>
|
||||||
|
</el-input>
|
||||||
|
<span class="input-help">
|
||||||
|
{{ $t('container.limitHelper', [limits.cpu]) }}{{ $t('commons.units.core') }}
|
||||||
|
</span>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item :label="$t('container.memoryLimit')" prop="memory">
|
||||||
|
<el-input class="mini-form-item" v-model="dialogData.rowData!.memory">
|
||||||
|
<template #append><div style="width: 35px">MB</div></template>
|
||||||
|
</el-input>
|
||||||
|
<span class="input-help">{{ $t('container.limitHelper', [limits.memory]) }}MB</span>
|
||||||
|
</el-form-item>
|
||||||
<el-form-item :label="$t('container.tag')" prop="labelsStr">
|
<el-form-item :label="$t('container.tag')" prop="labelsStr">
|
||||||
<el-input
|
<el-input
|
||||||
type="textarea"
|
type="textarea"
|
||||||
@ -216,14 +231,6 @@
|
|||||||
v-model="dialogData.rowData!.envStr"
|
v-model="dialogData.rowData!.envStr"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="$t('container.restartPolicy')" prop="restartPolicy">
|
|
||||||
<el-radio-group v-model="dialogData.rowData!.restartPolicy">
|
|
||||||
<el-radio label="no">{{ $t('container.no') }}</el-radio>
|
|
||||||
<el-radio label="always">{{ $t('container.always') }}</el-radio>
|
|
||||||
<el-radio label="on-failure">{{ $t('container.onFailure') }}</el-radio>
|
|
||||||
<el-radio label="unless-stopped">{{ $t('container.unlessStopped') }}</el-radio>
|
|
||||||
</el-radio-group>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
</el-form>
|
</el-form>
|
||||||
@ -282,6 +289,9 @@ const acceptParams = (params: DialogProps): void => {
|
|||||||
itemCmd += `'${item}' `;
|
itemCmd += `'${item}' `;
|
||||||
}
|
}
|
||||||
dialogData.value.rowData.cmdStr = itemCmd ? itemCmd.substring(0, itemCmd.length - 1) : '';
|
dialogData.value.rowData.cmdStr = itemCmd ? itemCmd.substring(0, itemCmd.length - 1) : '';
|
||||||
|
if (dialogData.value.rowData.entrypoint) {
|
||||||
|
dialogData.value.rowData.entrypointStr = dialogData.value.rowData.entrypoint.join(' ');
|
||||||
|
}
|
||||||
dialogData.value.rowData.labels = dialogData.value.rowData.labels || [];
|
dialogData.value.rowData.labels = dialogData.value.rowData.labels || [];
|
||||||
dialogData.value.rowData.env = dialogData.value.rowData.env || [];
|
dialogData.value.rowData.env = dialogData.value.rowData.env || [];
|
||||||
dialogData.value.rowData.labelsStr = dialogData.value.rowData.labels.join('\n');
|
dialogData.value.rowData.labelsStr = dialogData.value.rowData.labels.join('\n');
|
||||||
@ -391,13 +401,21 @@ const onSubmit = async (formEl: FormInstance | undefined) => {
|
|||||||
dialogData.value.rowData!.labels = dialogData.value.rowData!.labelsStr.split('\n');
|
dialogData.value.rowData!.labels = dialogData.value.rowData!.labelsStr.split('\n');
|
||||||
}
|
}
|
||||||
dialogData.value.rowData!.cmd = [];
|
dialogData.value.rowData!.cmd = [];
|
||||||
if (dialogData.value.rowData?.cmdStr) {
|
if (dialogData.value.rowData?.cmdStr.indexOf(`'`) !== -1) {
|
||||||
let itemCmd = dialogData.value.rowData!.cmdStr.split(`'`);
|
let itemCmd = dialogData.value.rowData!.cmdStr.split(`'`);
|
||||||
for (const cmd of itemCmd) {
|
for (const cmd of itemCmd) {
|
||||||
if (cmd && cmd !== ' ') {
|
if (cmd && cmd !== ' ') {
|
||||||
dialogData.value.rowData!.cmd.push(cmd);
|
dialogData.value.rowData!.cmd.push(cmd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
let itemCmd = dialogData.value.rowData!.cmdStr.split(` `);
|
||||||
|
for (const cmd of itemCmd) {
|
||||||
|
dialogData.value.rowData!.cmd.push(cmd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (dialogData.value.rowData!.entrypointStr) {
|
||||||
|
dialogData.value.rowData!.entrypoint = dialogData.value.rowData!.entrypointStr.split(' ');
|
||||||
}
|
}
|
||||||
if (!checkPortValid()) {
|
if (!checkPortValid()) {
|
||||||
return;
|
return;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user