Я пытаюсь развернуть контейнер с несколькими докерами на Elastic Beanstalk. Существует два контейнера: один для приложения supervisor + uwsgi + django и один для внешнего интерфейса JavaScript.
Используя docker-compose, он отлично работает локально
Мой файл для создания докеров:
version: '2'
services:
frontend:
image: node:latest
working_dir: "/frontend"
ports:
- "3000:3000"
volumes:
- ./frontend:/frontend
- static-content:/frontend/build
command: bash -c "yarn install && yarn build"
web:
build: web/
working_dir: "/app"
volumes:
- ./web/app:/app
- static-content:/home/docker/volatile/static
command: bash -c "pip3 install -r requirements.txt && python3 manage.py migrate && supervisord -n"
ports:
- "80:80"
- "8000:8000"
depends_on:
- db
- frontend
volumes:
static-content:
Образ для nodejs - это официальный образ Docker. Для «Интернета» я использую следующий Dockerfile:
FROM ubuntu:16.04
# Install required packages and remove the apt packages cache when done.
RUN apt-get update && \
apt-get upgrade -y && \
apt-get install -y \
python3 \
python3-dev \
python3-setuptools \
python3-pip \
nginx \
supervisor \
sqlite3 && \
pip3 install -U pip setuptools && \
rm -rf /var/lib/apt/lists/*
# install uwsgi now because it takes a little while
RUN pip3 install uwsgi
# setup all the configfiles
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
COPY nginx-app.conf /etc/nginx/sites-available/default
COPY supervisor-app.conf /etc/supervisor/conf.d/
EXPOSE 80
EXPOSE 8000
Однако AWS использует свои собственные настройки «компоновки», определенные в файле dockerrun.aws.json, который имеет другой синтаксис, поэтому мне пришлось его адаптировать. Сначала я использовал контейнер-преобразование приложение для создания файла на основе моего docker-compose
Затем мне нужно внести некоторые изменения, например: файл AWS, похоже, не имеет свойства "workdir", поэтому мне пришлось изменить его в соответствии с
Я также опубликовал свое изображение в AWS Elastic Container Registry.
Файл стал таким:
{
"AWSEBDockerrunVersion": 2,
"containerDefinitions": [
{
"command": [
"bash",
"-c",
"yarn install --cwd /frontend && yarn build --cwd /frontend"
],
"essential": true,
"image": "node:latest",
"memory": 128,
"mountPoints": [
{
"containerPath": "/frontend",
"sourceVolume": "_Frontend"
},
{
"containerPath": "/frontend/build",
"sourceVolume": "Static-Content"
}
],
"name": "frontend",
"portMappings": [
{
"containerPort": 3000,
"hostPort": 3000
}
]
},
{
"command": [
"bash",
"-c",
"pip3 install -r /app/requirements.txt && supervisord -n"
],
"essential": true,
"image": "<my-ecr-image-path>",
"memory": 128,
"mountPoints": [
{
"containerPath": "/app",
"sourceVolume": "_WebApp"
},
{
"containerPath": "/home/docker/volatile/static",
"sourceVolume": "Static-Content"
},
{
"containerPath": "/var/log/supervisor",
"sourceVolume": "_SupervisorLog"
}
],
"name": "web",
"portMappings": [
{
"containerPort": 80,
"hostPort": 80
},
{
"containerPort": 8000,
"hostPort": 8000
}
],
"links": [
"frontend"
]
}
],
"family": "",
"volumes": [
{
"host": {
"sourcePath": "/var/app/current/frontend"
},
"name": "_Frontend"
},
{
"host": {
"sourcePath": "static-content"
},
"name": "Static-Content"
},
{
"host": {
"sourcePath": "/var/app/current/web/app"
},
"name": "_WebApp"
},
{
"host": {
"sourcePath": "/var/log/supervisor"
},
"name": "_SupervisorLog"
}
]
}
Но затем после развертывания я вижу это в журналах:
> ------------------------------------- /var/log/containers/frontend-xxxxxx-stdouterr.log
>
> ------------------------------------- yarn install v1.3.2
> [1/4] Resolving packages...
> [2/4] Fetching packages...
> info There appears to be trouble with your network connection.
> Retrying...
> info There appears to be trouble with your network connection.
> Retrying...
> info There appears to be trouble with your network connection.
> Retrying...
> info There appears to be trouble with your network connection.
> Retrying...
> info There appears to be trouble with your network connection.
> Retrying...
> info There appears to be trouble with your network connection.
> Retrying...
> info There appears to be trouble with your network connection.
> Retrying...
> error An unexpected error occurred:
> "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.179.0.tgz:
> ESOCKETTIMEDOUT".
Я попытался увеличить тайм-аут для пряжи ... но ошибка все еще возникает
Я также не могу даже выполнить bash в контейнере (он застревает навсегда) или любую другую команду (то есть: попытаться воспроизвести проблему с пряжей)
И _SupervisorLog, похоже, не отображает в соответствии с этим, папка пуста, и я не могу точно понять, что происходит, или правильно воспроизвести ошибку
Если я пытаюсь перейти по URL-адресу, иногда я получаю Bad Gateway, иногда я даже не понимаю этого. Если я пытаюсь перейти по пути, по которому должен загружаться «интерфейс», я получаю ошибку «запрещено». Чтобы уточнить, это работает нормально, когда я запускаю контейнеры локально с помощью docker-compose.
Я начал использовать Docker недавно, поэтому не стесняйтесь указывать на любую другую проблему, которую вы можете найти в моих файлах.