2016-07-11 9 views
2

Сегодня я переключился с «Docker Toolbox» на «Docker for Mac», потому что у Docker теперь наконец-то был доступ к записи в мой каталог User (который не работал с «Docker Toolbox»,) - Ура!Как запустить контейнер Docker в собственной сети

Но это изменение также включает в себя, что все контейнеры теперь работают под моим локальным хостом, а не под IP-адресом Докера, как и раньше (например, 192.168.99.100).

Поскольку мой localhost прослушивает различные порты по умолчанию (80, 443, ...), и я не хочу всегда добавлять новые созданные порты, которые не конфликтуют со стандартными, с моими локальными доменами dev (например, example.dev:8443), мне интересно, как запустить мои контейнеры, как и раньше.

Я читал около network конфигураций и пробовал много вещей (создавая новую хост-сеть, выставляя порты с IP перед ним, ...), но не работал.

Какую конфигурацию мне нужно для запуска контейнера приложения с IP 192.168.99.100? То мой docker-compose.yml пока.

version: '2' 
services: 
    app: 
    build: 
     context: . 
     dockerfile: Dockerfile 
    depends_on: 
     - mysql 
     - redis 
     - memcached 
    ports: 
     - 80:80 
     - 443:443 
     - 22:22 
     - 3000:3000 
     - 3001:3001 
    volumes: 
     - ./app/:/app/ 
     - /tmp/debug/:/tmp/debug/ 
     - ./:/docker/ 
    volumes_from: 
     - storage 
    # cap and privileged needed for slowlog 
    cap_add: 
     - SYS_PTRACE 
    privileged: true 
    env_file: 
     - etc/environment.yml 
     - etc/environment.development.yml 

    mysql: 
    build: 
     context: docker/mysql/ 
     dockerfile: MariaDB-10 
    ports: 
     - 3306:3306 
    volumes_from: 
     - storage 
    volumes: 
     - ./data/mysql:/var/lib/mysql 
     - /tmp/debug/:/tmp/debug/ 
    env_file: 
     - etc/environment.yml 
     - etc/environment.development.yml 

    redis: 
    build: docker/redis/ 
    volumes_from: 
     - storage 
    env_file: 
     - etc/environment.yml 
     - etc/environment.development.yml 

    memcached: 
    build: docker/memcached/ 
    volumes_from: 
     - storage 
    env_file: 
     - etc/environment.yml 
     - etc/environment.development.yml 

    storage: 
    build: docker/storage/ 
    volumes: 
     - /storage 
+1

проверить это https://forums.docker.com/t/host-excluded-from-bridge-network/12015/11 –

ответ

-1

Вы можете определить сеть в своем файле компоновки, а затем добавить любые услуги в сеть.

https://docs.docker.com/compose/networking/

Но я хотел бы предложить вам просто использовать разные порты теперь, когда вы работаете изначально. То есть 8080: 80

+0

Вот что я пробовал, но это тоже не работает, потому что порты в мостовой сети отправляются на localhost. – Slevin

0

Вы должны объявить "сети:" для каждого из ваших услуг:

например

version: '2' 
services: 
    app: 
     image: xxxx:xxx 
     ports: 
      - "80:80" 
     networks: 
      - my-network 
    mysql: 
     image: xxxx:xxx 
     networks: 
      - my-network 
networks: 
    my-network: 
     driver: bridge 

После этого со стороны вашей конфигурации приложения вы можете использовать «mysql» в качестве имени сервера базы данных.

Смежные вопросы