podman/podman-compose에서 컨테이너 간 네트워킹은 어떻게 작동합니까?

podman/podman-compose에서 컨테이너 간 네트워킹은 어떻게 작동합니까?

저는 내 집 연구실에서 podman 버전 4.0.2 및 podman-compose 버전 1.0.3을 사용하여 RHEL 9.0 호환 운영 체제를 실행하고 있습니다. 추가 정보가 필요하면 알려주시기 바랍니다!

Docker 컨테이너 사용에서 루트 없는 Podman 컨테이너 사용으로 전환하려고 합니다. 이를 위해 제가 시도한 거의 모든 *nix 운영 체제에 새로 설치된 Docker 설정에서 실행되는 매우 간단한 서비스 세트를 소개했습니다. 간단하죠? 아니요

먼저 컨테이너 이미지의 전체 경로를 제공하고 Docker 저장소에 표시되는 대로 이를 참조해야 했습니다. 나쁘지 않네.

내 작성 파일은 브리지된 네트워크를 선언하고 각 서비스가 해당 네트워크에 연결됩니다.

컨테이너에서 포트가 노출된 모든 서비스는 네트워크의 다른 컴퓨터에서 액세스할 수 있습니다. 포트 8080, 8443, 3306은 모두 내 노트북에서 액세스할 수 있습니다.

문제는 컨테이너가 서로 통신할 수 없다는 것입니다. Docker 네트워킹을 사용하면 컨테이너는 컨테이너 이름만 호스트 이름으로 사용하여 서로를 확인할 수 있습니다. 각 컨테이너에 ping을 설치했는데, 자체 컨테이너 이름을 참조할 때 모두 자체적으로 ping을 수행할 수 있지만 다른 컨테이너에서는 ping을 수행할 수 없다는 사실을 발견했습니다. 이는 뿌리 없는 컨테이너에 대한 나의 계획을 실제로 방해합니다.

내 작성 파일에서 먼저 네트워크를 선언합니다.

version: 3.1

networks:
  neta:
    driver: bridge

각 서비스는 컨테이너 이름을 선언하고 이를 네트워크에 연결합니다. 예를 들면 다음과 같습니다.

    container_name: httpd
    networks:
      - neta
...
    container_name: mariadb
    networks:
      - neta

문제가 내 파일에만 국한된 것이 아니라 뿌리 없는 Podman 특성과 관련되어 있다고 생각하기 때문에 전체 작성 파일을 게시하지 않습니다.

내 문제는 httpd 컨테이너가 mariadb에 액세스할 수 없고 그 반대의 경우도 마찬가지라는 것입니다.

내 포드맨 여행은 24시간도 채 안 됐고, 실제로는 4시간도 채 안 됐어요. 나는 컨테이너 네트워킹이 "그냥 작동"할 것이라고 생각했지만 지금은 틀렸습니다.

어떤 의견, 링크 또는 제안이라도 대단히 감사하겠습니다.

감사해요

답변1

docker compose 파일을 kubernetes yaml 파일로 변환하는 것이 좋습니다. 이렇게 하면 Podman Play kube를 활용할 수 있습니다.https://docs.podman.io/en/v3.4.1/markdown/podman-play-kube.1.html

yaml 파일 자체에서 docker compose 파일에서 수행하는 작업과 유사하게 포트를 정의할 수 있습니다. 모든 컨테이너는 동일한 Pod에 있으므로 localhost를 사용할 수 있습니다.

  - name: container_A
    image: docker.io/container_A
    ports:
      - containerPort: 27017
        hostPort: 27017
        protocol: TCP
  - name: container_B
    image: docker.io/container_B
    ports:
      - containerPort: 8081
        hostPort: 8081
        protocol: TCP

관련 정보