, Что я здесь пропустил?
я есть несколько контейнеров для веб-приложения (nginx, gunicorn, postgres и узел для создания статических файлов из исходного кода и рендеринга на стороне сервера React). В Dockerfile для контейнера узла у меня есть два шага: сборка и запуск (Dockerfile.node). Он заканчивается двумя каталогами внутри контейнера:bundle_client
- это статика для nginx иbundle_server
- используется в самом контейнере узла для запуска экспресс-сервера.
Тогда мне нужно поделиться встроенной статической папкой (bundle_client
) с контейнером nginx. Чтобы сделать это в соответствии с указанием docker-compose в моемdocker-compose.yml
У меня есть следующие услуги (см. Полныйдокер-compose.yml):
node:
volumes:
- vnode:/usr/src
nginx:
volumes:
- vnode:/var/www/tg/static
depends_on:
- node
и объемы:
volumes:
vnode:
Бегdocker-compose build
завершается без ошибок. Бегdocker-compose up
работает все нормально, и я могу открытьlocalhost:80
и есть nginx, gunicorn и node express SSR, все прекрасно работает, и я вижу веб-страницу, но все статические файлы возвращают 404 не найдена ошибка.
Если я проверю объемы сdocker volume ls
Я вижу два недавно созданных тома с именемtg_vnode
(что мы рассмотрим здесь) иtg_vdata
(см. полный docker-compose.yml)
Если я иду в контейнер nginx сdocker run -ti -v /tmp:/tmp tg_node /bin/bash
Я не вижу своегоwww/tg/static
папка, которая должна сопоставить мои статические файлы с тома узла. Также я попытался создать пустой/var/www/tg/static
папка с контейнером nginxDockerfile.nginx
но он остается пустым.
Если я сопоставлюbundle_client
папку с хост-машины вdocker-compose.yml
вnginx.volumes
раздел как- ./client/bundle_client:/var/www/tg/static
все работает нормально, и я могу видеть все статические файлы, обслуживаемые nginx, в браузере.
Что я делаю неправильно и как заставить мой контейнер делиться встроенным статическим контентом с контейнером nginx?
PS: Я прочитал все документы, все проблемы с github и stackoverflow Q & As, и, как я понял, он должен работать, и нет никакой информации, что делать, когда это не так.
UPD: Результатdocker volume inspect vnode
:
[
{
"CreatedAt": "2018-05-18T12:24:38Z",
"Driver": "local",
"Labels": {
"com.docker.compose.project": "tg",
"com.docker.compose.version": "1.21.1",
"com.docker.compose.volume": "vnode"
},
"Mountpoint": "/var/lib/docker/volumes/tg_vnode/_data",
"Name": "tg_vnode",
"Options": null,
"Scope": "local"
}
]
файлы:Dockerfile.node, докер-compose.yml
Докер-файл Nginx:Dockerfile.nginx
UPD: Я создал упрощенный репо, чтобы воспроизвести вопрос:Сделки рЕПО (есть несколько предупреждений оnpm install
неважно, он устанавливает и строит нормально). В конце концов, когда мы открываемlocalhost:80
мы видим пустую страницу и 404 сообщения для статических файлов (vendor.js
а такжеapp.js
) в Chrome dev tools но там должно быть сообщениеReact app: static loaded
генерируется реагирующим скриптом.