Вот структура папки Docker:
.
├── default.conf
├── dist
│ ├──3rdpartylicenses.txt
│ ├──favicon.ico
│ ├──index.html
│ ├──main.814148b8a52c3996d8f6.js
│ ├──polyfills.c72d3210425a88b28b6d.js
│ ├──runtime.6afe30102d8fe7337431.js
│ └──styles.914f038ddd792d8e3589.css
└── Dockerfile
Содержание default.conf:
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
charset utf-8;
location / {
try_files $uri /index.html;
}
}
Содержание Dockerfile:
FROM nginx:1.13.3-alpine
COPY default.conf /etc/nginx/conf.d/
RUN rm -rf /usr/share/nginx/html/*
COPY dist/ /usr/share/nginx/html/
CMD ["nginx", "-g", "daemon off;"]
Файлы в dist взяты с ng build --prod.
Итак, я выполняю команду: docker build -t nanda_image . на ec2 ssh. А потом docker run --rm --name nanda_container -p 80:80 nanda_image.
Это результат docker container ls:
Вывод netstat -nlp:
После этого я считаю, что завершаю развертывание. По крайней мере, я верю. Однако, когда я пытаюсь получить доступ к развернутому мной веб-сайту, я обнаружил, что IP-адрес долго не отвечал. На самом деле хочу знать, в чем ошибка. Спасибо вам всем. :)
Можете ли вы получить доступ к этому сайту прямо из EC2? т.е. работает curl localhost
@RobertRanjan Я пытаюсь понять, как создать группу безопасности с помощью ssh, поскольку у меня нет пароля, который позволил бы мне напрямую войти в ec2. Все, что у меня есть, - это ключ .pem. Сообщу вам, если это сработает. Спасибо!
@ IgnacioMillán Я получаю curl: (7) Failed to connect to localhost port 80: Connection refused. Кажется, мне не удается развернуть ... Все еще пытаюсь понять, что происходит ... Очень признателен за ответ!
О группах безопасности см. Документацию EC2: docs.aws.amazon.com/AWSEC2/latest/UserGuide/…
@RobertRanjan @ IgnacioMillán Если у меня есть только файл .pem, означает ли это, что мне не разрешено назначать группу безопасности серверу? Я пытаюсь использовать команду aws ec2, но для этого мне нужны AWS Access Key ID и AWS Secret Access Key. Все, что я могу сейчас сделать, это связаться с парнем, который дает мне файл .pem?
Сначала убедитесь, что вы успешно создали nginx и можете получить к нему доступ с вашего ssh-терминала. Создайте контейнер с помощью команды, которую я предоставил выше, см. Добавлен флаг -d. Затем запустите curl localhost и убедитесь, что nginx запущен и доступен локально.
@RobertRanjan Во-первых, я хочу поблагодарить вас за ваше терпение. Я использую предложенный вами режим отсоединения и использую docker ps для проверки того, что контейнер действительно работает. Однако, когда я попытался установить curl localhost, он предоставил curl: (7) Failed to connect to localhost port 80: Connection refused. Означает ли это, что проблема не в группе безопасности, а в самом Nginx?
@RobertRanjan Хотя сервер все еще не работает, я обновил новый Dockerfile, чтобы он стал более понятным.
Я просто создал файлы и папки так же, как вы, создал образ докера, запустил контейнер и получил доступ к странице с помощью curl и браузера. Не знаю, почему у вас не работает. Не могли бы вы приложить к вашему вопросу снимок экрана с выводом docker run ... и netstat -nlp?
Я не вижу проблем со старым или новым Dockerfile, оба работают нормально. Пожалуйста, добавьте приведенную выше информацию к вашему вопросу.
@RobertRanjan Я приложил снимок экрана. Спасибо за помощь! Для tcp 127.0.0.1:5002 - это просто API-интерфейс python, работающий с tmux. Думаю, это не относительное, а на всякий случай.
Спасибо. Порт 80 прослушивает, но не уверен, почему это tcp6, а не tcp. Попробуйте curl по этой ссылке - stackoverflow.com/questions/24302447/ipv6-curl-post-request
Позвольте нам продолжить обсуждение в чате.





Создайте группу безопасности EC2 и назначьте ее серверу, на котором вы запускаете контейнер докеров, если вы еще этого не сделали. Также добавьте параметр -d в команду запуска докера.
docker run -d --rm --name nanda_container -p 80:80 nanda_image