Как запустить и получить доступ к веб-серверу, работающему внутри контейнера Docker - PullRequest
0 голосов
/ 02 мая 2020

У меня проблемы с пониманием того, как Docker обрабатывает вещи.

Я пытаюсь запустить веб-сервер узла для целей разработки. Я определил это в docker -compose.yml, и все работает нормально, когда я запускаю его оттуда. Но когда я вручную запускаю его изнутри контейнера, он не может быть доступен извне.

Например: это работает нормально

node:
        image: node:10.15-stretch
        tty: true
        command: bash -c "./node_modules/.bin/encore dev-server --host 0.0.0.0 --public http://dev.local:8080 --port 8080 --disable-host-check --hot"
        working_dir: /var/www/
        volumes:
            - ${PATH_SOURCE}:/var/www/
        ports:
            - 8080:8080

Файлы теперь доступны из http://dev.local: 8080 !

Но я бы предпочел запускать его вручную только тогда, когда мне это нужно ... Поэтому я удаляю команду из docker -compose.yml и запускаю ее изнутри контейнер:

node:
        image: node:10.15-stretch
        tty: true
        working_dir: /var/www/
        volumes:
            - ${PATH_SOURCE}:/var/www/
        ports:
            - 8080:8080
docker-compose run node bash
root@1535e3c963cc:/var/www/# ./node_modules/.bin/encore dev-server --host 0.0.0.0 --public http://dev.local:8080 --port 8080 --disable-host-check --hot

Процесс работает нормально, но файлы не доступны с http://dev.local: 8080 ...

Я уверен, что есть кое-что, чего мне не хватает в Docker, но я не могу найти что ...

Спасибо за вашу помощь.

РЕДАКТИРОВАТЬ: здесь полный текст config

version: '3'
services:
    apache:
        image: httpd
        volumes:
            - ${PATH_SOURCE}/.docker/conf/apache/httpd.conf:/usr/local/apache2/conf/httpd.conf
            - ${PATH_SOURCE}/.docker/conf/apache/httpd-vhosts.conf:/usr/local/apache2/conf/extra/httpd-vhosts.conf
            - ${PATH_SOURCE}:/var/www/sadc/alarm
        ports:
            - 80:80
            - 443:443
        restart: always
        depends_on:
            - php
            - postgres

    php:
        build: .docker
        restart: always
        ports:
            - 9000:9000
        volumes:
            - ${PATH_SOURCE}/.docker/conf/php/php.ini:/etc/php/7.1/cli/php.ini
            - ${PATH_SOURCE}/.docker/conf/php/php.ini:/etc/php/7.1/fpm/php.ini
            - ${PATH_SOURCE}:/var/www/sadc/alarm
        environment:
            - PGDATESTYLE=ISO,DMY
        working_dir: /var/www/sadc/alarm


    postgres:
        image: mdillon/postgis:10
        restart: always
        environment:
            - POSTGRES_DB=${PG_DATABASE}
            - POSTGRES_USER=${PG_USERNAME}
            - POSTGRES_PASSWORD=${PG_PASSWORD}
            - PGDATESTYLE=ISO,DMY
        ports:
            - 5432:5432
        volumes:
            - sadc-alarm-pgdata:/var/lib/postgresql/data
            - ${PATH_SOURCE}:/var/www/sadc/alarm
            - ${PATH_SOURCE}/.docker/conf/postgres/initdb.sql:/docker-entrypoint-initdb.d/initdb.sql

    node:
        image: node:10.15-stretch
        tty: true
        working_dir: /var/www/sadc/alarm
        volumes:
            - ${PATH_SOURCE}:/var/www/sadc/alarm
        ports:
            - 8080:8080
$ docker ps
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS                                      NAMES
c6a394453de4        node:10.15-stretch   "node"                   2 hours ago         Up 50 seconds       0.0.0.0:8080->8080/tcp                     alarm_node_1     
5dcc8b936b58        httpd                "httpd-foreground"       21 hours ago        Up 49 seconds       0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   alarm_apache_1   
bb616453d0cc        alarm_php            "/bin/sh -c '/usr/sb…"   21 hours ago        Up 49 seconds       0.0.0.0:9000->9000/tcp                     alarm_php_1      
3af75f3a3716        mdillon/postgis:10   "docker-entrypoint.s…"   28 hours ago        Up 49 seconds       0.0.0.0:5432->5432/tcp   

РЕДАКТИРОВАТЬ 2

Проблема связана с методом "docker -compose run" ...

Когда я выполните следующее, используя «docker exe c», оно работает

docker exec -it node_alarm_1 bash

ОКОНЧАТЕЛЬНОЕ РЕДАКТИРОВАНИЕ

ОК.

Так что я пропустил метод "docker -compose run". Это метод "docker -compose exe c", который следует использовать, поскольку он повторно использует работающий контейнер, который правильно сопоставлен. «docker -compose run» вместо этого запустить не отображенный контейнер ...

1 Ответ

0 голосов
/ 02 мая 2020

docker-compose run не похоже на публикацию портов, описанную в файле docker-compose.yml.

Чтобы устранить проблему, выполните следующие действия:

docker-compose run -p 8080:8080 node bash

или

docker-compose run --service-ports node bash
...