클라우드 샌드박스에서 포트 노출하기

클라우드 샌드박스에서 포트 노출하기

샌드박스 안에서 실행되는 웹 애플리케이션에 HTTPS URL로 도달해 봐요. 게시는 애플리케이션으로의 라우트를 만들지, 애플리케이션을 시작하지는 않아요.

출처: 문서

본문

인증된 클라이언트, 샌드박스 이름, 게시할 포트에서 듣는 HTTP 애플리케이션이 필요해요. 0.0.0.0처럼 샌드박스 안에서 도달 가능한 주소에 애플리케이션을 바인딩하세요.

애플리케이션의 포트 게시

샌드박스 이름과 애플리케이션의 포트 번호를 제공하세요. 예시는 TCP를 사용해요. 호스트 이름을 직접 구성하는 대신 서비스가 반환한 URL을 사용하세요.

이것은 HTTP 애플리케이션 접근이지 범용 TCP 터널이 아니에요. Docker 계정 인증은 애플리케이션 URL을 보호하지 않아요. 민감한 데이터를 노출하기 전에 애플리케이션에서 인증을 구성하고, Docker 계정 토큰을 그 URL로 절대 보내지 마세요.

핵심 코드:

return sandbox.ports.create(
  { number, protocol: 'tcp' },
  { idempotencyKey: requestId },
);

완전한 TypeScript 예시: ports/publish.ts

import type { Sandboxes } from '@docker/sandboxes';

export async function createPort(
  client: Sandboxes,
  sandboxName: string,
  number: number,
  requestId: string,
) {
  const sandbox = await client.get(sandboxName);
  return sandbox.ports.create(
    { number, protocol: 'tcp' },
    { idempotencyKey: requestId },
  );
}

게시된 포트 나열

기존 게시물과 그 URL을 찾으려면 샌드박스의 포트 컬렉션을 읽어요. 애플리케이션의 준비 상태는 별도로 확인하세요. 게시된 라우트가 애플리케이션이 시작되었음을 증명하지는 않아요.

핵심 코드:

return (await sandbox.ports.list()).published ?? [];

완전한 TypeScript 예시: ports/list.ts

import type { Sandbox } from '@docker/sandboxes';

export async function listPorts(sandbox: Sandbox) {
  return (await sandbox.ports.list()).published ?? [];
}

게시물 철회

더 이상 접근이 필요 없을 때 게시된 포트를 삭제해요. 이는 라우트를 제거하지만 애플리케이션 프로세스는 실행 상태로 둬요.

샌드박스를 중지한다고 포트 게시물이 제거되지는 않아요. 샌드박스를 삭제하면 제거돼요.

핵심 코드:

await port.delete();

완전한 TypeScript 예시: ports/unpublish.ts

import type { Port } from '@docker/sandboxes';

export async function deletePort(port: Port) {
  await port.delete();
}

더 알아보기 (Learn more)