我很难部署使用docker容器使用mySQL数据库的Django项目。
我能够创建两个容器,但web
容器在创建错误后立即退出代码1 - Not able to find tg_db database
。
我的理解是,当我运行docker-compose up -d
来启动两个容器时,它使用MYSQL_DATABASE=tg_db
环境变量来创建名为 tg_db 的数据库,该数据库被使用和标识为django设置。或者,我可以运行命令docker-compose run web python3 manage.py migrate
来运行docker-compose,它将在其上创建数据库和迁移。如果不是这样,请告诉我。
以下是使用的文件:
settings.py
:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'tg_db',
'USER': 'root',
'PASSWORD': 'password',
'HOST': 'db',
'PORT': '3306',
'OPTIONS': {'init_command': 'SET default_storage_engine=INNODB;'}
},}
Dockerfile
:
# Start with a python image
FROM python:3
# Some stuff that everyone has been copy-pasting
# since the dawn of time.
ENV PYTHONUNBUFFERED 1
# Install things
RUN apt-get update
# Make folders and locations for project
RUN mkdir /code
COPY . /code
WORKDIR /code/project/t_backend
# Install requirements
RUN pip install -U pip
RUN pip install -Ur requirements.txt
当我WORKDIR /code/project/t_backend
坐在那里时,Woking目录设置为manage.py
,Dockerfile和docker-compose.yml文件与项目文件夹位于同一个地方。
docker-compose.yml
:
version: '3'
services:
db:
image: mysql:latest
restart: always
environment:
- MYSQL_DATABASE=tg_db
- MYSQL_ROOT_PASSWORD=password
volumes:
- ./dbdata:/var/lib/mysql
web:
build: .
command: bash -c "python manage.py runserver 0.0.0.0:8000"
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
提前谢谢!
答案 0 :(得分:0)
所以,让我一步一步地描述你的案例。
1。这是data['rand_between'] = [np.random.randint(s, e) for s,e in zip(data['start'], data['end'])]
文件中输入print (data)
start end rand_between
0 1 10 8
1 2 20 3
2 3 30 23
3 4 40 35
4 5 50 30
5 6 60 28
6 7 70 60
7 8 80 14
8 9 90 85
9 10 100 83
而非docker-compose.yaml
的拼写错误。
2。 MYSQL_DATABSE=tg_db
并启动了两个容器。当然,从未创建数据库MYSQL_DATABASE=tg_db
。
3. 根据docker-compose up -d
文件,主机上的文件夹tg_db
将安装到容器内的docker-compose.yaml
。因此,当在上一步中创建容器时,所有mysql数据都写入容器中的文件夹./dbdata
和主机上的/var/lib/mysql
文件夹。由于步骤1中的拼写错误,此数据没有/var/lib/mysql
数据库:
./dbdata
4. Typo已更正(设置了正确的环境变量名称)并重新创建了堆栈:
tg_db
但是当完成此操作时,带有上一次尝试数据的$ ls -la dbdata/
total 176196
drwxrwxr-x 5 guest-ryx1oj guest-ryx1oj 4096 Apr 8 21:18 .
drwxrwxr-x 3 np np 4096 Apr 8 21:17 ..
-rw-r----- 1 guest-ryx1oj guest-ryx1oj 56 Apr 8 21:17 auto.cnf
-rw------- 1 guest-ryx1oj guest-ryx1oj 1675 Apr 8 21:17 ca-key.pem
-rw-r--r-- 1 guest-ryx1oj guest-ryx1oj 1107 Apr 8 21:17 ca.pem
-rw-r--r-- 1 guest-ryx1oj guest-ryx1oj 1107 Apr 8 21:17 client-cert.pem
-rw------- 1 guest-ryx1oj guest-ryx1oj 1679 Apr 8 21:17 client-key.pem
-rw-r----- 1 guest-ryx1oj guest-ryx1oj 662 Apr 8 21:18 ib_buffer_pool
-rw-r----- 1 guest-ryx1oj guest-ryx1oj 79691776 Apr 8 21:18 ibdata1
-rw-r----- 1 guest-ryx1oj guest-ryx1oj 50331648 Apr 8 21:18 ib_logfile0
-rw-r----- 1 guest-ryx1oj guest-ryx1oj 50331648 Apr 8 21:17 ib_logfile1
drwxr-x--- 2 guest-ryx1oj guest-ryx1oj 4096 Apr 8 21:17 mysql
drwxr-x--- 2 guest-ryx1oj guest-ryx1oj 4096 Apr 8 21:17 performance_schema
-rw------- 1 guest-ryx1oj guest-ryx1oj 1679 Apr 8 21:17 private_key.pem
-rw-r--r-- 1 guest-ryx1oj guest-ryx1oj 451 Apr 8 21:17 public_key.pem
-rw-r--r-- 1 guest-ryx1oj guest-ryx1oj 1107 Apr 8 21:17 server-cert.pem
-rw------- 1 guest-ryx1oj guest-ryx1oj 1679 Apr 8 21:17 server-key.pem
drwxr-x--- 2 guest-ryx1oj guest-ryx1oj 12288 Apr 8 21:17 sys
文件夹再次装入容器docker-compose down
docker compose up -d
并覆盖在容器启动期间创建的数据。当然,已安装文件夹中的数据没有./dbdata
数据库。
<强>解决方案:强>
请删除主机上/var/lib/mysql
文件夹中的所有数据(我希望它只是一段时间的测试,因此数据并不重要且可以删除)并重新创建堆栈再次:
tg_db