У меня проблема при запуске docker-compose up. Он зависает при подключении, и я не могу получить доступ к своему веб-приложению на localhost:4200
.
docker-compose.yml:
version: '2' # specify docker-compose version
# Define the services/containers to be run
services:
angular: # name of the first service
build:
context: .
dockerfile: ./.docker/scs.dockerfile # specify the directory of the Dockerfile
container_name: secure-cloud-storage-build-dev
image: secure-cloud-storage
ports:
- "4200:4200" # specify port forwarding
dockerfile:
# Stage 0, based on Node.js, to build and compile Angular
FROM node:8.6 as node
WORKDIR /app
COPY package.json /app/
RUN npm install
COPY ./ /app/
ARG env=prod
RUN npm run build -- --prod --environment $env
# Stage 1, based on Nginx, to have only the compiled app, ready for production with Nginx
FROM nginx:1.13
COPY --from=node /app/dist/ /usr/share/nginx/html
COPY ./nginx-custom.conf /etc/nginx/conf.d/default.conf
nginx-custom.conf:
server {
listen 80;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html =404;
}
}
Вот подробный вывод:
docker-compose --verbose up вывод
Есть подсказки, что может пойти не так? Я новичок в мире Docker, в основном занимаюсь учебными пособиями, так что может быть что-то очевидное, что я пропустил.
Мой localhost:4200
возвращает ERR_EMPTY_RESPONSE
.
Ваш docker-compose.yaml
указывает, что ваше приложение в контейнере работает на порту 4200, но ваш nginx-custom.conf
прослушивает порт 80. Эти порты должны совпадать.
В моем случае докер тоже зависает, показывая сообщение «Присоединяется к ...», но приложение работает. Так что, похоже, это проблема с отображением, которую вы можете игнорировать.
Вы можете запустить докер в автономном режиме docker-compose up -d angular
, чтобы подавить это сообщение. До сих пор я не понимал, как запустить его в режиме переднего плана, не получив сообщения.
Ваши файлы конфигурации в целом выглядят нормально, но вы должны настроить правильные порты, т.е. nginx также должен прослушивать порт 4200.
Я знаю, что опаздываю на вечеринку, но этого следовало ожидать. docker-compose up, как и docker run, требует флаг -d, если вы хотите вернуть свою командную строку.
Вот как будет выглядеть команда: docker-compose up -d
Что касается того, почему ваше приложение возвращает пустой ответ, я не уверен.
Надеюсь, это поможет другим перейти к этой теме!
Попробуйте запустить эту команду в другом терминале:
docker exec -it ${CONTAINERNAME} echo "Kick it"
Это по какой-то причине помогло мне с зависанием приложения docker-compose к материалам. Похоже, что STDOUT по какой-то причине зависает, и это еще больше увеличивает его ... Странно, но он зависает только при использовании docker-compose ... Запуск каждой службы по отдельности работает как шарм ...
Я копировал / вставлял и в итоге получил две службы с одинаковым именем
services:
node_server:
...
node_server: # Duplicate service!
...
Это может привести к зависанию docker compose на Attaching to
.
сначала создайте образы, а затем составьте их вместо использования build.