programing

도커 작성을 위해 호스트 네트워크를 사용하는 방법은 무엇입니까?

topblog 2023. 8. 11. 21:28
반응형

도커 작성을 위해 호스트 네트워크를 사용하는 방법은 무엇입니까?

호스트 네트워크에서 도커 합성을 사용합니다.

로컬 REST API에 액세스할 수 있는 도커 컨테이너가 있습니다.보통 나는 달립니다.

docker run --net=host -p 18080:8080 -t -i containera

다음에서 실행되는 호스트 REST API에 액세스할 수 있습니다.http://127.0.0.1:8080용기의 크기를 조정하고 싶기 때문에containera도커가 컨테이너를 확장할 수 있는 구조물을 발견했습니다.그러나 설명서의 도커 합성 파일이 작동하지 않습니다.도커 컨테이너는 REST API를 쿼리하지 않습니다.

다음 컴포지트 파일을 시도했지만 속성이

version: "3"
services:
  web:
    image: conatinera:latest
    network_mode: "host"
    deploy:
      replicas: 1
      resources:
        limits:
          cpus: "0.5"
          memory: 4G 
      restart_policy:
        condition: on-failure
    ports:
      - "18080:8080"

그러나 재산.network_mode무시됩니다/허용되지 않습니다.전언과 함께

Ignoring unsupported options: network_mode

도커 합성 v3의 동등한 구성은network_mode키: https://docs.docker.com/compose/compose-file/compose-file-v3/ #network_mode

설정해야 합니다.network_mode로."host"당신의docker-compose.yml.

도커 스웜을 사용하는 경우 코드스테이션의 답변을 참조하십시오.

구성 및 스웜 배포에서 유효하지 않은 옵션을 혼합하고 있습니다.

도커 합성을 사용하여 배포하는 경우 합성 파일은 다음과 같습니다.

version: "3"
services:
  web:
    image: conatinera:latest
    network_mode: "host"        
    restart: on-failure

Te 옵션deploy호스트 모드 네트워킹을 사용할 때는 구성 모드에서 무시되고 포트 옵션은 무시됩니다.호스트 모드 네트워킹을 사용하지 말고 다른 컨테이너에서 역방향 프록시를 사용하여 확장된 컨테이너의 균형을 맞추는 것이 좋습니다.


(스웜 배포를 사용하지 않는다는 점을 분명히 했기 때문에 답변의 이 부분은 무시해도 됩니다.)

스웜 배포를 사용하는 경우 작성 파일은 다음과 같습니다.

version: "3.4"
services:
  web:
    image: conatinera:latest
    deploy:
      replicas: 1
      resources:
        limits:
          cpus: "0.5"
          memory: 4G 
      restart_policy:
        condition: on-failure
    networks:
      - host

networks:
  host:
    name: host
    external: true

게시된 포트와 호스트 모드 네트워킹이 혼합되지 않습니다.또한 모든 컨테이너가 동일한 포트에 바인딩되기 때문에 확장이 실패할 수 있습니다.호스트 모드 네트워킹을 사용하지 않고 도커가 복제본 로드 밸런싱을 수행하도록 하는 것이 좋습니다.

저도 같은 문제에 직면했습니다.나는 그것을 발견했습니다.network_mode으로 설정됨host컨테이너가 호스트의 포트를 찾기 때문에 포트 매핑이 작동하지 않습니다.그래서 포트 매핑을 제거하는 것은 다음과 같이 저에게 효과가 있었습니다.

services:
  web-abc:
    build: ./abc
    # ports:
    #   - "7000:7000"
    volumes:
      - .:/code
    network_mode: host

도커 구성에서 이것은 완벽하게 작동했습니다.

extra_hosts:
      - "host.docker.internal:host-gateway"

여기에 대한 설명이 있습니다. 작성 파일에서 --add-host=host.syser.internal:host-messages와 동등한 것은 무엇입니까?

저는 당신이 다음과 같이 도커-디버깅 파일을 정의해야 한다고 생각합니다.이것은 단지 예입니다. 문서 설명서를 읽어 보십시오. https://docs.docker.com/compose/compose-file/ #network-configuration-reference

version: "3"
services:
  web:
    image: conatinera:latest
    networks:
      mynetwork: {}
    deploy:
      replicas: 1
      resources:
        limits:
          cpus: "0.5"
          memory: 4G 
      restart_policy:
        condition: on-failure
    ports:
      - "18080:8080"
networks:
  mynetwork:
    external: true
    name: host

당신은 어느 플랫폼에 있습니까?host모드는 Linux에서만 작동합니다. AFAIK.network_mode. 시도 중입니다.network: host?

version: '3.4'
serivces:
  some_service:
  build:
    network: host

network_mode: 호스트는 스웜 모드에서 허용되지 않습니다.

나 자신은 성공하지 못했습니다.networks또는network_mode하도록 설정하면 .docker0동일한 IP 주소에 있는 컨테이너(네트워크 모드에 따라 다름)에서 액세스할 수 있는 네트워크 인터페이스입니다.아래 개념 증명.

호스트에서:

$ ip -4 a | grep docker0
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0

$ echo hello world | nc -l -p 8888 -s 172.17.0.1

컨테이너:

$ docker run --rm -it alpine nc -w1 172.17.0.1 8888
hello world

도커 컨테이너에 호스트 서비스를 액세스할 수 있도록 하는 또 다른 방법은 컨테이너에 마운트할 수 있는 유닉스 소켓에서 수신하는 것입니다.

언급URL : https://stackoverflow.com/questions/56582446/how-to-use-host-network-for-docker-compose

반응형