1
0
Fork 0
mirror of https://github.com/portainer/portainer.git synced 2025-08-04 21:35:23 +02:00
portainer/app/react/docker/images/ItemView/DockerfileDetails.tsx
Ali d38085a560
Some checks are pending
ci / build_images (map[arch:amd64 platform:linux version:]) (push) Waiting to run
ci / build_images (map[arch:amd64 platform:windows version:1809]) (push) Waiting to run
ci / build_images (map[arch:amd64 platform:windows version:ltsc2022]) (push) Waiting to run
ci / build_images (map[arch:arm platform:linux version:]) (push) Waiting to run
ci / build_images (map[arch:arm64 platform:linux version:]) (push) Waiting to run
ci / build_images (map[arch:ppc64le platform:linux version:]) (push) Waiting to run
ci / build_images (map[arch:s390x platform:linux version:]) (push) Waiting to run
ci / build_manifests (push) Blocked by required conditions
/ triage (push) Waiting to run
Lint / Run linters (push) Waiting to run
Test / test-client (push) Waiting to run
Test / test-server (map[arch:amd64 platform:linux]) (push) Waiting to run
Test / test-server (map[arch:amd64 platform:windows version:1809]) (push) Waiting to run
Test / test-server (map[arch:amd64 platform:windows version:ltsc2022]) (push) Waiting to run
Test / test-server (map[arch:arm64 platform:linux]) (push) Waiting to run
chore(data-cy): require data-cy attributes [EE-6880] (#11453)
2024-04-11 12:11:38 +12:00

75 lines
2.2 KiB
TypeScript

import { List } from 'lucide-react';
import { joinCommand } from '@/docker/filters/utils';
import { getPairKey, getPairValue } from '@/portainer/filters/filters';
import { TableContainer, TableTitle } from '@@/datatables';
import { DetailsTable } from '@@/DetailsTable';
interface DockerImage {
Command: null | Array<string>;
Entrypoint: Array<string>;
ExposedPorts: Array<number>;
Volumes: Array<string>;
Env: Array<string>;
}
interface Props {
image: DockerImage;
}
export function DockerfileDetails({ image }: Props) {
return (
<TableContainer>
<TableTitle label="Dockerfile details" icon={List} />
<DetailsTable dataCy="dockerfile-details-table">
<DetailsTable.Row label="CMD">
<code>{image.Command ? joinCommand(image.Command) : '-'}</code>
</DetailsTable.Row>
{image.Entrypoint && (
<DetailsTable.Row label="ENTRYPOINT">
<code>{joinCommand(image.Entrypoint)}</code>
</DetailsTable.Row>
)}
{image.ExposedPorts.length > 0 && (
<DetailsTable.Row label="EXPOSE">
{image.ExposedPorts.map((port, index) => (
<span className="label label-default space-right" key={index}>
{port}
</span>
))}
</DetailsTable.Row>
)}
{image.Volumes.length > 0 && (
<DetailsTable.Row label="VOLUME">
<div className="flex flex-wrap gap-1">
{image.Volumes.map((volume, index) => (
<span key={index} className="label label-default space-right">
{volume}
</span>
))}
</div>
</DetailsTable.Row>
)}
{image.Env.length > 0 && (
<DetailsTable.Row label="ENV">
<table className="table-bordered table-condensed table">
<tbody>
{image.Env.map((variable) => (
<tr key={variable}>
<td>{getPairKey(variable, '=')}</td>
<td>{getPairValue(variable, '=')}</td>
</tr>
))}
</tbody>
</table>
</DetailsTable.Row>
)}
</DetailsTable>
</TableContainer>
);
}