Files
portainer/app/react/docker/containers/ItemView/ContainerDetailsSection/ContainerDetailsSection.tsx
T
Chaim Lev-Ari 808ceba848 feat(docker): allow user to specify security-opts (#2022)
Co-authored-by: dylan <dfldylan@qq.com>
Co-authored-by: jerry-yuan <i@jerryzone.cn>
2026-03-11 08:56:42 +02:00

93 lines
2.8 KiB
TypeScript

import { List } from 'lucide-react';
import { ContainerDetailsViewModel } from '@/docker/models/containerDetails';
import { EnvironmentId } from '@/react/portainer/environments/types';
import { joinCommand } from '@/docker/filters/utils';
import { DetailsTable } from '@@/DetailsTable';
import { Widget } from '@@/Widget';
import { RestartPolicy } from '../../CreateView/RestartPolicyTab/types';
import { RestartPolicySection } from '../RestartPolicySection/RestartPolicySection';
import { ImageRow } from './ImageRow';
import { PortConfigurationRow } from './PortConfigurationRow';
import { EnvironmentVariablesRow } from './EnvironmentVariablesRow';
import { LabelsRow } from './LabelsRow';
import { SysctlsRow } from './SysctlsRow';
import { SecurityOptRow } from './SecurityOptRow';
import { GpuRow } from './GpuRow';
interface Props {
environmentId: EnvironmentId;
container: ContainerDetailsViewModel;
nodeName?: string;
onUpdateSuccess?(): void;
}
export function ContainerDetailsSection({
environmentId,
container,
nodeName,
onUpdateSuccess,
}: Props) {
const config = container.Config;
const hostConfig = container.HostConfig;
if (!config || !hostConfig || !container.Id) {
return null;
}
const restartPolicyName = hostConfig.RestartPolicy?.Name as
| RestartPolicy
| undefined;
return (
<Widget>
<Widget.Title icon={List} title="Container details" />
<Widget.Body>
<DetailsTable dataCy="container-details-table">
<ImageRow
image={config.Image || ''}
imageHash={container.Image || ''}
nodeName={nodeName}
/>
<PortConfigurationRow ports={container.NetworkSettings?.Ports} />
<DetailsTable.Row label="CMD">
<code>{joinCommand(config.Cmd)}</code>
</DetailsTable.Row>
<DetailsTable.Row label="ENTRYPOINT">
<code>
{config.Entrypoint ? joinCommand(config.Entrypoint) : 'null'}
</code>
</DetailsTable.Row>
<EnvironmentVariablesRow variables={config.Env} />
<LabelsRow labels={config.Labels} />
<DetailsTable.Row label="Restart policies">
<RestartPolicySection
environmentId={environmentId}
containerId={container.Id}
nodeName={nodeName}
name={restartPolicyName}
maximumRetryCount={hostConfig.RestartPolicy?.MaximumRetryCount}
onUpdateSuccess={onUpdateSuccess}
/>
</DetailsTable.Row>
<SysctlsRow sysctls={hostConfig.Sysctls} />
<SecurityOptRow securityOpts={hostConfig.SecurityOpt} />
<GpuRow deviceRequests={hostConfig.DeviceRequests} />
</DetailsTable>
</Widget.Body>
</Widget>
);
}