我在笔记本电脑上用docker-compose制作了两张图片,然后把它们放在一个私人回购中。现在,我想在虚拟机中部署映像,所以我使用docker pull来获取它们,并使用docker run -d来运行容器。问题是容器无法启动,因为没有找到包含所有变量的.env文件。
/entrypoint: line 12: STRATEGY_DB_NAME: unbound variable
Waiting for PostgreSQL to become available...这个文件存在于我的笔记本电脑中的./strategy/.env中,我想知道在虚拟机中应该在哪里复制这个文件。
我是新部署人员,还不清楚是否需要用git push上传虚拟机中的所有项目文件,然后再上传docker run的Docker映像。我认为这是不必要的,因为这些文件被嵌入到Docker映像中。
我的问题是为什么找不到.env文件,我应该在哪里复制它?
docker-compose.yml
version: '3.8'
services:
django:
build:
context: .
dockerfile: ./compose/local/django/Dockerfile
image: strategy
command: /start
volumes:
- .:/app
ports:
- "8004:8004"
env_file:
- strategy/.env <--------------- file with secrets
depends_on:
- redis-4
networks:
- mynetworkDockerfile
FROM python:3.10
ENV PYTHONUNBUFFERED 1
ENV PYTHONDONTWRITEBYTECODE 1
WORKDIR /app
RUN apt-get update \
&& apt-get install -y gcc build-essential \
&& apt-get install -y libpq-dev \
&& apt-get install -y gettext \
&& apt-get install -y git \
&& apt-get install -y openssh-client \
&& apt-get install -y libcurl4-openssl-dev libssl-dev \
&& apt-get install -y build-essential \
&& apt-get install -y libpq-dev \
&& apt-get install -y procps telnet \
&& apt-get install -y nano \
&& apt-get install -y postgresql-client \
&& apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \
&& rm -rf /var/lib/apt/lists/*
RUN mkdir logs \
&& touch logs\flat_line.log \
&& touch logs\json.log
# Requirements are installed here to ensure they will be cached.
COPY ./requirements.txt /requirements.txt
RUN pip install -r /requirements.txt
RUN pip install ccxt --upgrade \
&& pip install numpy --upgrade \
&& pip install psycopg2 --upgrade
COPY ./compose/local/django/entrypoint /entrypoint
RUN chmod +x /entrypoint
COPY ./compose/local/django/start /start
RUN chmod +x /start
COPY ./compose/local/django/celery/worker/start /start-celeryworker
RUN chmod +x /start-celeryworker
COPY ./compose/local/django/celery/beat/start /start-celerybeat
RUN chmod +x /start-celerybeat
COPY ./compose/local/django/celery/flower/start /start-flower
RUN chmod +x /start-flower
RUN mkdir /app/strategy
COPY ssl /app/strategy
ENTRYPOINT ["/entrypoint"]入口点
#!/bin/bash
# if any of the commands in your code fails for any reason, the entire script fails
# fail exit if one of your pipe command fails
# exits if any of your variables is not set
set -o errexit
set -o pipefail
set -o nounset
postgres_ready() {
python << END
import sys
import psycopg2
try:
psycopg2.connect(
dbname="${STRATEGY_DB_NAME}",
user="${STRATEGY_DB_USER}",
password="${STRATEGY_DB_PASSWORD}",
host="${STRATEGY_DB_HOST}",
port="${STRATEGY_DB_PORT}",
sslmode="require",
)
except psycopg2.OperationalError:
sys.exit(-1)
sys.exit(0)
END
}
until postgres_ready; do
>&2 echo 'Waiting for PostgreSQL to become available...'
sleep 1
done
>&2 echo 'PostgreSQL is available'
exec "$@"发布于 2022-09-23 18:57:04
如果您希望使用docker-compose从映像中运行容器,则需要使用env_file指定环境文件。
#docker-compose.yml
version: '3.8'
services:
container_name:
image: imagee:1.0
...
env_file: .env
...与Docker一样,您可以添加参数--env-file,如:
docker run image:1.0 --env-file .envhttps://stackoverflow.com/questions/73827719
复制相似问题