構築django+mariadb环境的时候所做的备忘录,使用docker-compose

我想做的事情

我想要使用docker-compose构建Django容器和MariaDB容器,并创建一个环境,以便从Django容器访问MariaDB容器的数据库。由于遇到一些麻烦,所以我将步骤记录下来作为备忘录。

环境

我正在使用树莓派操作系统(32位)进行尝试。

pi@master:~ $ uname -a
Linux master 5.10.103-v7l+ #1529 SMP Tue Mar 8 12:24:00 GMT 2022 armv7l GNU/Linux

pi@master:~ $ docker --version
Docker version 20.10.17, build 100c701

pi@master:~ $ docker-compose --version
docker-compose version 1.21.0, build unknown

各容器的IP地址和端口转发设置如下所示。关于docker-compose的其他详细设置将不进行说明。

    • djangoコンテナ

IP : 172.100.0.2 (172.100.0.0/24)
ポート : 8888:8888

mariadbコンテナ

IP : 172.100.0.4 (172.100.0.0/24)
ポート : 3306:3306

MariaDB的配置内容

以下是在MariaDB容器中执行的配置内容。

使Mariadb可以从外部进行连接

编辑/etc/mysql/mariadb.conf.d/50-server.cnf,在bind-address设置中加入注释。

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address		= 127.0.0.1  # ← この行をコメントアウトする

重新启动服务。

service mysql restart

如果运行netstat -atn命令,本地地址显示为tcp6 :::3306,则表示正常。

创建外部连接用户并设置权限

登录到Mariadb并执行以下SQL。

/* DB作成 */
create database django;

/* ユーザ作成と権限設定 */
create user 'django'@'172.100.0.%' identified by 'password';
grant all on django.* to 'django'@'172.100.0.%';

/* ユーザのパスワード設定 */
set password for 'django'@'172.100.0.%' = password('password');   -- 例:パスワードを"password"に設定

/* 確認 */
select user, host from mysql.user; -- django | 172.100.0.% が出ればOK

Django设置内容可以进行如下释义:

这是在Django容器中执行的配置内容。

修改 settings.py 文件

将DATABASES的设置更改为mysql。
因为在docker-compose中将hostname设置为mariadb,所以将HOST设置为主机名mariadb。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django',
        'USER': 'django',
        'PASSWORD': 'password',
        'HOST': 'mariadb',
        'PORT': '3306',
        'OPTIONS': {
                'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
                },
    }
}

在这个设置下,django容器和mariadb容器之间应该可以通信。
如果能在django容器内执行”python manage.py dbshell”并连接到mariadb容器的数据库,那就算成功了。

从主机访问在Django容器中启动的应用程序。

假设存在一个Windows的浏览器,它与正在运行的Raspberry Pi容器以及django容器之间建立了一种关系。

Windowsのブラウザ → コンテナが起動しているRaspberry Pi
docker-composeで8888ポートをフォワーディングすることで接続できます。

コンテナが起動しているRaspberry Pi → djangoコンテナ
Raspberry Piのホストからdjangoコンテナへのアクセスを許可するよう設定が必要です。
djangoのsettings.pyのALLOWED_HOSTSの項目を修正します。今回は全許可で設定しています。

ALLOWED_HOSTS = ['*']

只需要下面一个选项:

在应用程序启动时,使用python manage.py runserver 0.0.0.0:8888命令,可以将8888端口启动在全主机上,而不是仅限于localhost。
这样,您就可以从Windows访问在Raspberry Pi上运行的容器了。

广告
将在 10 秒后关闭
bannerAds