Как получить доступ к контейнерам в сети хоста с помощью docker compose?

#node.js #mongodb #docker #docker-compose

Вопрос:

У меня есть следующий файл docker-compose, который я пытаюсь создать в сети хоста. Сборка прошла успешно, но я не вижу никакого результата после сборки.

 version: "3.3"
services:
    mycontainer_3000:
        container_name: mycontainer_3000
        build:
            context: src/mycontainer_3000
            dockerfile: ./../../Dockerfile.dev
            args:
                - T_ENV
        image: myproject/mycontainer_3000:latest 
        restart: unless-stopped
        network_mode: host
        volumes:
            - "./src/mycontainer_3000:/usr/src/app"
        depends_on:
            - mycontainer_3001
    mycontainer_3001:
        container_name: mycontainer_3001
        build:
            context: src/mycontainer_3001
            dockerfile: ./../../Dockerfile.dev
            args:
                - T_ENV
        image: myproject/mycontainer_3001:latest
        volumes:
            - "./src/mycontainer_3001:/usr/src/app"
        depends_on:
            - mongo
    mycontainer_3003:
        container_name: mycontainer_3003
        build:
            context: src/mycontainer_3003
            dockerfile: ./../../Dockerfile.dev
            args:
                - T_ENV
        image: myproject/mycontainer_3003:latest
        network_mode: host
        volumes:
            - "./src/mycontainer_3003:/usr/src/app"
        depends_on:
            - mongo
    mycontainer_3002:
        container_name: mycontainer_3002
        build:
            context: src/mycontainer_3002
            dockerfile: ./../../Dockerfile.dev
            args:
                - T_ENV
        image: myproject/mycontainer_3002:latest
        network_mode: host
        volumes:
            - "./src/mycontainer_3002:/usr/src/app"
    mongo:
        image: mongo
        restart: always
        network_mode: host
        volumes:
            - "./db/:/data/db"

    mongo-express:
        image: mongo-express
        restart: always
        network_mode: host
        environment:
            ME_CONFIG_MONGODB_URL: mongodb://mongo:27017/
 

Когда я компилирую с помощью docker-compose up , все контейнеры успешно создаются.
Но когда я пытаюсь получить доступ к любому из контейнеров, используя http://localhost:3000 или любой другой порт, он показывает, что на этом порту ничего не работает!

Комментарии:

1. Вам почти никогда не понадобится сеть хоста, и она не работает на хостах, отличных от Linux, или если Docker иным образом работает на виртуальной машине. Какова ваша хост-система? Если ваши службы прослушивают отдельные порты, можете ли вы вместо этого использовать настройку Compose, например ports: ['3000:3000'] ?

2. Я использую Docker для рабочего стола. Ошибка заключается в следующем : ERROR: for mycontainer_3002 "host" network_mode is incompatible with port_bindings

3. Если вы используете рабочий стол Docker, сеть хоста, вероятно, работает не так, как вы ожидаете. Удалите эту network_mode: host опцию.

Ответ №1:

Попробуйте добавить ports , чтобы явно раскрыть их

 version: "3.3"
services:
    mycontainer_3000:
        container_name: mycontainer_3000
        build:
            context: src/mycontainer_3000
            dockerfile: ./../../Dockerfile.dev
            args:
                - T_ENV
        image: myproject/mycontainer_3000:latest 
        restart: unless-stopped
        network_mode: host
        #HERE
        ports: '3000:3000'
        volumes:
            - "./src/mycontainer_3000:/usr/src/app"
        depends_on:
            - mycontainer_3001
    mycontainer_3001:
        container_name: mycontainer_3001
        build:
            context: src/mycontainer_3001
            dockerfile: ./../../Dockerfile.dev
            args:
                - T_ENV
        image: myproject/mycontainer_3001:latest
        #HERE
        ports: '3001:3001'
        volumes:
            - "./src/mycontainer_3001:/usr/src/app"
        depends_on:
            - mongo
    mycontainer_3003:
        container_name: mycontainer_3003
        build:
            context: src/mycontainer_3003
            dockerfile: ./../../Dockerfile.dev
            args:
                - T_ENV
        image: myproject/mycontainer_3003:latest
        network_mode: host
        #HERE
        ports: '3003:3003'
        volumes:
            - "./src/mycontainer_3003:/usr/src/app"
        depends_on:
            - mongo
    mycontainer_3002:
        container_name: mycontainer_3002
        build:
            context: src/mycontainer_3002
            dockerfile: ./../../Dockerfile.dev
            args:
                - T_ENV
        image: myproject/mycontainer_3002:latest
        network_mode: host
        #HERE
        ports: '3002:3002'
        volumes:
            - "./src/mycontainer_3002:/usr/src/app"
    mongo:
        image: mongo
        restart: always
        network_mode: host
        #HERE
        ports: '27017:27017'
        volumes:
            - "./db/:/data/db"

    mongo-express:
        image: mongo-express
        restart: always
        network_mode: host
        #HERE
        ports: '8080:8080'
        environment:
            ME_CONFIG_MONGODB_URL: mongodb://mongo:27017/
 

Комментарии:

1. Попытка сделать это приводит к ошибке : services.mycontainer_3000.ports contains an invalid type, it should be an array И если я предоставлю его в массиве : ERROR: for mycontainer_3002 "host" network_mode is incompatible with port_bindings

2. Я обновил содержимое YML, проверьте, работает ли оно сейчас. Я изменил номера портов на строки