Предоставить доступ к контейнеру Docker через локальную сеть и получить доступ к нему с другого хоста

Я пытаюсь открыть доступ к контейнеру через мою локальную сеть, чтобы получить доступ к этому контейнеру с другого компьютера в той же сети. Я следовал руководству tihs (раздел "С устройствами macvlan"), и мне удалось поделиться простым веб-контейнером и получить доступ с другого хоста.

Но контейнер, которым я хочу поделиться, немного сложнее, потому что он взаимодействует с другими контейнерами на хосте через внутреннюю сеть на хосте.

Я пытаюсь связать свой существующий контейнер, созданный в моем docker-compose, но не могу получить к нему доступ. Можете ли вы помочь мне или скажите, где я не прав, если так, пожалуйста?

Это мой docker-compose:

version: "2"
services:
  baseimage:
    container_name: baseimage
    image: base
    build:
      context: ./
      dockerfile: Dockerfile.base
  web:
    container_name: web
    image: web
    env_file:
      - .env
      context: ./
      dockerfile: Dockerfile.web
    extra_hosts:
      - dev.api.exemple.com:127.0.0.1
      - dev.admin.exemple.com:127.0.0.1
      - dev.www.exemple.com:127.0.0.1
    ports:
     - 80:80
     - 443:443
    volumes:
     - ./code:/ass
     - /var/run/docker.sock:/var/run/docker.sock
    tty: true
    dns:
      - 8.8.8.8
      - 8.8.4.4
    links:
      - mysql
      - redis
      - elasticsearch
      - baseimage
    networks:
      devbox:
        ipv4_address: 172.20.0.2
  cron:
    container_name: cron
    image: cron
    build:
      context: ./
      dockerfile: Dockerfile.cron
    volumes:
     - ./code:/ass
    tty: true
    dns:
      - 8.8.8.8
      - 8.8.4.4
    links:
      - web:dev.api.exemple.com
      - mysql
      - redis
      - elasticsearch
      - baseimage
    networks:
      devbox:
        ipv4_address: 172.20.0.3
  mysql:
    container_name: mysql
    image: mysql:5.6
    ports:
      - 3306:3306
    networks:
      devbox:
        ipv4_address: 172.20.0.4
  redis:
    container_name: redis
    image: redis:3.2.4
    ports:
      - 6379:6379
    networks:
      devbox:
        ipv4_address: 172.20.0.5
  elasticsearch:
    container_name: elastic
    image: elasticsearch:2.3.4
    environment:
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    volumes:
      - ./es_data:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      devbox:
        ipv4_address: 172.20.0.6
  chromedriver:
    container_name: chromedriver
    image: robcherry/docker-chromedriver:latest
    privileged: true
    ports:
      - 4444:4444
    environment:
      - CHROMEDRIVER_WHITELISTED_IPS='172.20.0.2'
      - CHROMEDRIVER_URL_BASE='wd/hub'
      - CHROMEDRIVER_EXTRA_ARGS='--ignore-certificate-errors'
    networks:
      devbox:
        ipv4_address: 172.20.0.7
    links:
      - web:dev.www.exemple.com
networks:
  devbox:
    driver: bridge
    driver_opts:
      com.docker.network.enable_ipv6: "false"
    ipam:
      driver: default
      config:
        - subnet: 172.20.0.0/16
          gateway: 172.20.0.1

1 ответ

Создать external сеть назначить external сеть и devbox сеть для web, Интернет станет общедоступным через external общедоступный IP-адрес в сети и взаимодействовать с внутренними службами, используя devbox сеть.

Выложу рабочий пример как можно скорее

Другие вопросы по тегам