IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Docker容器挂载目录时的小知识 -> 正文阅读

[系统运维]Docker容器挂载目录时的小知识

示例

mysql挂载

version: '3.1'

services:
  db:
    image: mysql:5.7.36
    restart: always
    ports:
      - 3310:3306
    environment:
      MYSQL_ROOT_PASSWORD: xxx
    volumes:
      - ./conf:/etc/mysql
      - ./data:/var/lib/mysql

启动命令:

docker-compose up -d

场景1:当前目录下没有conf、data目录

启动后会创建这两个目录,同时data目录下会有初始数据库数据,但conf中没有任何内容,进入容器的/etc/mysql也找不到任何内容,说明是正确挂载了,只是conf中没有任何内容,所以mysql启动的时候使用的是默认的配置文件。

场景2:当前目录下有conf、data目录,且data目录中有自定义的backup.sql文件

mysql启动报错,从data目录中初始化数据库时没有找到对应的数据库文件,所以启动出错

场景3:当前目录下有conf、data目录,且conf中有自定义的mysql.cnf

mysql启动正常,且使用自定义的配置文件进行启动,data目录中也会自动生成数据库初始文件

nginx挂载

version: '3'

# docker network create nginx_bridge
networks:
  nginx_bridge:
    driver: bridge

services:
  nginx:
    image: nginx:stable-alpine
    container_name: nginx-alpine
    restart: always
    privileged: true
    environment:
      - TZ=Asia/Shanghai
    ports:
      - 8080:80
    volumes:
      - ./conf.d:/etc/nginx/conf.d
      - ./log:/var/log/nginx
    networks:
      - nginx_bridge

启动命令:

docker-compose up -d

场景1:当前目录下没有conf.d、log目录

启动后会创建这两个目录,同时log目录下会有两个日志文件,但conf.d中没有任何内容,进入容器的/etc/nginx/conf.d也找不到任何内容,说明是正确挂载了,只是conf.d中没有任何内容,所以nginx启动的时候没有配置默认的default.conf文件,此时访问:

curl http://localhost:8080

是访问不到的,因为默认没有配置server

场景2:当前目录下有conf.d、log目录,且conf.d中配置了default.conf

default.conf文件如下:

server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

此时访问:

curl http://localhost:8080

是可以访问的,因为配置了server

如果不挂在conf.d,那么也是可以访问到http://localhost:8080的,此时使用默认的default.conf

总结

上述示例场景说明了几个问题:
(1)如果挂载的配置文件目录下为空,且在容器中该目录下有必要的启动配置文件,那么容器是启动后访问也是不正常的(nginx)
(2)如果挂载的数据文件目录下不为空,且容器会使用数据文件目录下的数据进行数据构建,那么如果数据不完整则会导致启动失败(mysql)
综上所述:
如果容器在启动过程中需要,那么挂载的时候确保里面有必要的文件。如果启动过程中不需要,那么容器启动后会自动在挂载目录中生成文件。

最佳实践:先使用默认配置启动,再从容器中cp出配置文件,然后根据需要修改配置文件再启动。数据文件同理。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-04-09 18:57:31  更:2022-04-09 18:58:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 22:27:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码