У меня проблемы с пониманием того, как 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» вместо этого запустить не отображенный контейнер ...