【发布时间】:2021-11-19 13:26:00
【问题描述】:
我有 django/react/postgres/docker 应用程序。当我尝试将其推送到 heroku 时,它在构建阶段看不到来自 heroku config vars 选项卡的环境变量
有没有办法在 docker 容器中获取 heroku 环境变量?
在 heroku 上,我附加了 Heroku Postgres 插件,但由于我的 env 变量在构建阶段被隐藏,我收到了一个错误:
django.db.utils.OperationalError: could not connect to server
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432?
Dockerfile.prod
FROM python:3.8
RUN apt-get install -y curl \
&& curl -sL https://deb.nodesource.com/setup_12.x | bash - \
&& apt-get install -y nodejs
WORKDIR /app/backend
COPY ./backend/Pipfile* /app/backend/
RUN pip install pipenv && pipenv install --system
WORKDIR /app/frontend
COPY ./frontend/package*.json /app/frontend/
RUN npm install
COPY . /app/
RUN npm run build
WORKDIR /app/frontend/build
RUN mkdir root && find . -type f -exec cp {} root \;
RUN mkdir /app/backend/staticfiles
WORKDIR /app
ENV DJANGO_SETTINGS_MODULE=config.settings.prod
RUN python backend/manage.py collectstatic --noinput
EXPOSE $PORT
RUN ["python", "backend/manage.py", "migrate", "--no-input"]
CMD [ "python", "backend/manage.py", "runserver", "0.0.0.0", $PORT]
settings.py
...
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': env.str("DB_NAME", default="postgres"),
'USER': env.str("DB_USER", default="postgres"),
'PASSWORD': env.str("DB_PASS", default="postgres"),
'HOST': env.str("DB_HOST", default="localhost"),
'PORT': env.decimal("DB_PORT", default=5432)
}
}
项目结构
.
├── backend
│ ├── config
│ ├── Dockerfile
│ ├── manage.py
│ ├── pages
│ ├── Pipfile
│ ├── Pipfile.lock
│ ├── templates
│ ├── todos
│ └── users
├── docker-compose.yml
├── Dockerfile.prod
├── frontend
│ ├── build
│ ├── Dockerfile
│ ├── Dockerfile.prod
│ ├── node_modules
│ ├── package.json
│ ├── package-lock.json
│ ├── public
│ ├── README.md
│ └── src
├── heroku.yml
└── README.md
【问题讨论】:
-
您将“config.settings.prod”指定为您的配置路径...但不在图像中(构建时间)。您是否将该文件挂载为卷(运行时)?
-
我使用
docker-compose.yml仅用于开发。我只是运行git push heroku master来部署应用程序。我认为设置文件是由COPY . /app/Dockerfile.prod中的命令复制的 -
你试过设置配置变量devcenter.heroku.com/articles/config-vars吗?
-
是的,所有的配置变量都设置好了
标签: python django docker heroku