Docker入门及实战

本文目录

一、安装docker

二、安装镜像

三、容器的基本操作指令

1.容器的启/停

2.进入容器的方法

[3. 容器与宿主机之间传输文件](#3. 容器与宿主机之间传输文件)

[四、Dock 数据卷的管理](#四、Dock 数据卷的管理)

1.挂载时创建卷

2.提前创建数据卷

2.1普通数据卷

2.2共享数据卷

五、Dockerfile基本指令

六、Dockfile前端构建镜像

七、Dockfile后端构建镜像

八、多阶段构建镜像

[九、Dcoker-compose 简要描述](#九、Dcoker-compose 简要描述)

1.作用

2.安装

3.编排启动镜像


一、安装docker

java 复制代码
cd /etc/yum.repos.d/         
wget https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo         # 下载docker YUM源
sed -ri 's#download.docker.com#mirrors.ustc.edu.cn/docker-ce#g' docker-ce.repo  #国外地址改为国内
yum install -y docker-ce                                                       

二、安装镜像

可以上dockerhub官网: https://hub.docker.com/

这里举例安装Nginx镜像

①在dockerhub上搜索nainx镜像

②点击进入页面查看关于nginx镜像的版本信息(下图圈起来的表示是可以下载的版本

除了到dockerhub的官网上搜索nginx镜像外还可以在linux上使用命令来搜索nginx镜像(不过我建议用上面的方式搜索镜像,因为关于镜像的信息会更加详细和明朗)

java 复制代码
docker search nginx     #搜索nginx镜像

③下载nginx镜像(因为没指定nginx的版本,所以下载的是最新的nginx镜像)

java 复制代码
再docker拉取镜像时,花费时间太长。用如下方法可以解决:
[root@localhost ~]# vim /etc/docker/daemon.json           #将国外地址换成国内阿里的地址
{
 "registry-mirrors": ["https://9cpn8tt6.mirror.aliyuncs.com"]
}
[root@localhost ~]# systemctl daemon-reload               #重新加载该文件     
[root@localhost ~]# systemctl restart docker              #重启服务即生效
java 复制代码
#这两个镜像地址下载calico镜像时贼快
[
    "https://docker.mirrors.ustc.edu.cn",
    "http://hub-mirror.c.163.com"
  ]
java 复制代码
这个镜像地址下载jenkins镜像时贼快
{
  "registry-mirrors": ["https://2tefyfv7.mirror.aliyuncs.com"]
}

改完地址后再下载nginx镜像

java 复制代码
docker pull nginx  # 若想下载指定版本的,可以在镜像后加:版本号,例:docker pull nginx:1.22 
docker image ls    # 查看镜像

④启动容器(启动容器时给容器映射主机端口,方便外网对nginx容器进行访问)

java 复制代码
docker container run -itd --name webserver -p 8081:80 nginx:1

-p 8081:80把主机的8081端口映射到docker的80端口上(80端口是nginx的默认端口,当访问主机的8081端口时,会自动把8081映射到80端口,从而访问nginx)

三、容器的基本操作指令

1.容器的启/停

查看容器

java 复制代码
docker container ls

运行容器(创建容器)

java 复制代码
docker container run -itd --name webserver -p 8081:80 nginx:1.21 
# run运行。-i指input,t指terminal(终端),d指后台运行。 --name指容器名字 -P指端口映射(将宿主机的8081端口映射到容器里的80端口)

重启容器

java 复制代码
docker restart webserver

关闭容器

java 复制代码
docker stop webserver

强制关闭容器

java 复制代码
docker kill webserver

查看所有容器(包括已停止的容器)

java 复制代码
docker ps -a

删除容器

java 复制代码
docker container rm webserver

删除所有的容器

java 复制代码
docker container rm -f `docker ps -a -q`

2.进入容器的方法

1.先运行一个容器

java 复制代码
docker container run -itd --name webserver -p 8081:80 nginx:1.21

2.进入容器

java 复制代码
docker container exec -it webserver bash #bash指解释器,也可以换成sh

3.进入容器后随即查看nginx配置文件

java 复制代码
cat /etc/nginx/conf.d/default.conf

4.退出容器

java 复制代码
exit

3. 容器与宿主机之间传输文件

1.从容器中拷贝文件到宿主机

java 复制代码
docker cp webserver:/etc/nginx/conf.d/default.conf . #.指拷贝到当前目录

2.在宿主机上将拷贝过来的文件进行修改

java 复制代码
vim default.conf

3.从宿主机上再将修改后的文件拷贝到容器中

java 复制代码
docker cp default.conf webserver:/etc/nginx/conf.d/default.conf

四、Dock 数据卷的管理

1.挂载时创建卷

目的:将宿主机上的/root/opt/webserver目录映射到容器里

java 复制代码
创建目录
mkdir /opt/webserver
运行一个容器 (多了-v)
docker container run -itd --name webserver -p 8080:80 -v /opt/webserver:/usr/share/nginx/html nginx:1.21

2.提前创建数据卷

2.1普通数据卷

java 复制代码
1.先创建一个webserver名称的数据卷
[root@docker ~]# docker volume create --name webserver \
> --opt type=tmpfs \                 # tmpfs指临时文件
> --opt device=tmpfs \               #注意,换行符\的后面不能有空格
> --opt o=size=100m                  # 数据卷大小
webserver
[root@docker ~]#         
                                   
2.查看数据卷
[root@docker ~]# docker volume ls
DRIVER              VOLUME NAME
local               webserver
[root@ansible ~]# 

3.查看webserver数据卷的详细信息 (观察该数据卷的挂载点,在宿主机的某个地址。后续只需在挂载点添加文件即可同步到容器里)
[root@docker ~]# docker volume inspect webserver
[
    {
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/webserver/_data",
        "Name": "webserver",
        "Options": {
            "device": "tmpfs",
            "o": "size=100m",
            "type": "tmpfs"
        },
        "Scope": "local"
    }
]
[root@docker ~]# 

4.然后再运行一个容器(-v后面的webserver是数据卷名称,:后面是容器里文件的位置)  
[root@docker ~]# docker container run -itd --name webserver -p 8081:80 -v webserver:/usr/share/nginx/html nginx:1.21

2.2共享数据卷

java 复制代码
1.先创建一个webserver名称的数据卷
docker volume create --name webserver \            
> --opt type=nfs \                                 # nfs指共享
> --opt o=addr=192.168.145.205,rw \                # 192.168.145.205指nfs的IP地址,即共享对象(NFS 服务器)的IP地址。
> --opt device=:/poth/to/dir                       # /poth/to/dir该路径指nfs的挂载点

2.查看数据卷
docker volume ls  

3.然后再运行一个容器(-v后面的webserver是共享数据卷名称,:后面是容器里文件的位置)  
docker container run -itd --name webserver -p 8081:80 -v webserver:/usr/share/nginx/html nginx:1.21

五、Dockerfile基本指令

命令 用途 示例
FROM 来源于哪个基础镜像哪个tag FROM centos:7
MAINTAINER 作者信息 zhangsan
RUN 容器构建时需要运行的命令: 支持两种格式 shell: yum isntall -y vim exec: ["可执行文件","参数"] RUN yum isntall -y vim
EXPOSE 对外暴露端口 EXPOSE 80
WORKDIR 容器创建后,终端默认登录进来的工作目录 WORKDIR /home/admin
USER 指定该镜像以什么用户去执行 默认为root USER admin
ENV 运行时环境变量 ENV JAVA_HOME /usr/local/java/openJDK11
VOLUME 配置容器数据卷挂载 VOLUME /tmp
ADD 将宿主机目录下的文件拷贝进镜像并且会自动处理URL和解压tar包 ,等于copy+解压 ADD spring-boot-demo.jar demo.jar
COPY 将源文件从宿主机拷贝到容器内 COPY spring-boot-demo.jar demo.jar
CMD 在执行docker run时候执行,可以有多个cmd指令但是只有最后一个生效, docker run的参数会覆盖 cmd的参数,一般可变参数用cmd 支持两种格式 shell: yum isntall -y vim exec: ["可执行文件","参数"] CMD /bin/bash; CMD echo "success"
ENTRYPOINT 也是用来指定容器启动时要执行的命令,类似cmd 但是不会被 run 后的参数命令覆盖,固定参数一般用ENTRY_POINT, 当CMD和ENTRYPOINT联用时,cmd多用于给ENTRYPOINT传参 ENTRYPOINT ["java","-jar","/demo.jar"]

六、Dockfile前端构建镜像

dockerfile单阶段前端构建镜像

下载node镜像

java 复制代码
docker pull node

运行一个容器(node环境)

java 复制代码
docker run -itd --name webserver_vue -p 8080:8080 node

查看容器

java 复制代码
docker container ls

进入容器

java 复制代码
docker exec -it webserver_vue bash

提取代码(这一步需要研发提供的代码,一般会放在公共仓库github里)

java 复制代码
git clone https://gitee.com/mirschao/webserver-vue.git    #这里是放到了gitee.com
cd webserver-vue/                                         #进入下载的文件夹
npm install                                               #安装依赖包

启动npm项目

java 复制代码
npm run serve   如下图

访问该端口

java 复制代码
http://192.168.145.205:8080   如下图,前端项目放到容器里运行成功

如上述:是拉取一个node.js镜像,再去运行一个容器。进入容器后提取代码,部署依赖,然后启动npm项目。这种方式需要进去容器手动操作 。

如下述:下面一种方式是直接将所有操作构建出一个镜像,然后启动镜像的时候,会自动启动项目

检查是否有node镜像

java 复制代码
[root@localhost ~]# docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginx        latest    605c77e624dd   15 months ago   141MB
node         latest    a283f62cb84b   15 months ago   993MB

创建目录,用来存放和区分自定义镜像

java 复制代码
[root@localhost ~]# mkdir /opt/docker-image/webserver-vue -p

创建镜像文件

java 复制代码
[root@localhost ~]# cd /opt/docker-image/webserver-vue/        #来到创建的工作目录
[root@localhost webserver-vue]# vim Dockerfile                 #所有自定义的镜像名称是唯一。只能用路径来区分它们
[root@localhost webserver-vue]# cat Dockerfile          
FROM node                                                      #基于node镜像来创建镜像(基底镜像)
RUN git clone https://gitee.com/mirschao/webserver-vue.git     #下载代码
WORKDIR webserver-vue                                          #工作目录
RUN npm install                                                #部署依赖
EXPOSE 8080                                                    #暴露端口
CMD ["npm", "run", "serve"]                                    #这里是serve,不加r。报错排错了一小时

创建镜像

java 复制代码
[root@localhost webserver-vue]# docker build -t webserver-vue:v1.0 .
# -t代表指定镜像名称 :后面代表tag .代表使用当前目录下的 Dockerfile文件来创建镜像

检查镜像是否创建成功

java 复制代码
[root@localhost webserver-vue]# docker image ls            如下,webserver-vue镜像已创建成功
REPOSITORY      TAG       IMAGE ID       CREATED              SIZE
webserver-vue   v1.0      eeb1163b565d   About a minute ago   1.13GB
nginx           latest    605c77e624dd   15 months ago        141MB
node            latest    a283f62cb84b   15 months ago        993MB

运行容器

java 复制代码
docker run -itd --name webserver-vue-project -p 8090:8080 webserver-vue:v1.0

检查容器状态

java 复制代码
[root@localhost webserver-vue]# docker ps -a      这里不知道容器为什么是退出状态
CONTAINER ID   IMAGE                COMMAND                   CREATED          STATUS                      PORTS            NAMES
32ec6af84995   webserver-vue:v1.0   "docker-entrypoint.s..."   10 seconds ago   Exited (1) 8 seconds ago                     webserver-vue-project

重启容器

java 复制代码
[root@localhost webserver-vue]# docker restart webserver-vue-project    重启成功
webserver-vue-project

访问该端口

java 复制代码
http://192.168.145.205:8090   如下图,访问成功。说明自定义镜像运行容器成功

七、Dockfile后端构建镜像

dockerfile 单阶段后端构建镜像

下载python镜像

java 复制代码
docker pull python
docker pull python:alpine3.15   #这个包会小一点,但是拥有基本的Python运行环境

运行容器

java 复制代码
docker run -itd --name webserver-backend -p 8000:8000 python:alpine3.15

进入容器

java 复制代码
docker exec -it webserver-backend sh

下载代码

java 复制代码
git clone https://gitee.com/mirschao/webserver-backend.git
#这里报错没有git工具
sh: git: not found
解决方案:下载到宿主机上然后利用cp,从宿主机上拷贝到容器里
docker cp webserver-backend webserver-backend:/

进入容器后来到下载的目录

java 复制代码
docker exec -it webserver-backend sh
cd webserver-backend/

安装依赖 (前端安装依赖包使用 npm, 后端使用 pip

java 复制代码
pip install -i https://mirrors.ustc.edu.cn/pypi/web/simple -r requirements.txt
# -i表示指定网址,-r指定文件(依赖包文件),两个选项可以不加,目的是加快速度

启动项目

java 复制代码
python manage.py runserver 0.0.0.0:8000

真机浏览器访问

java 复制代码
http://192.168.145.212:8000/  访问

如上述:是拉取一个镜像,再去运行一个容器。进入容器后提取代码,部署依赖,然后启动项目。这种方式需要进去容器手动操作 。

如下述:下面一种方式是直接将所有操作构建出一个镜像,然后启动镜像的时候,会自动启动项目

检查是否有python镜像

java 复制代码
docker image ls
REPOSITORY      TAG          IMAGE ID       CREATED         SIZE
python          alpine3.15   eb5bc7d10d52   15 months ago   45.4MB

创建目录,用来存放和区分自定义镜像

java 复制代码
mkdir /opt/docker-image/webserver-backend1 -p

创建镜像文件

java 复制代码
cd /opt/docker-image/webserver-backend1/
vim Dockerfile
FROM python:alpine3.15
COPY . ./webserverbackend                    
WORKDIR webserverbackend
RUN pip install -i https://mirrors.ustc.edu.cn/pypi/web/simple -r requirements.txt
EXPOSE 8000
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

下载代码 (因为python:alpine3.15这个镜像里只有基础环境,没有下载工具,所以我们手动下载,再在Dockfile里配置拷贝)

java 复制代码
[root@localhost webserver-backend1]# git clone https://gitee.com/mirschao/webserver-backend.git
[root@docker webserver-backend1]# ls
Dockerfile  webserver-backend
[root@docker webserver-backend1]# ls webserver-backend/
Dockerfile  LICENSE  manage.py  README.md  requirements.txt  webserverbackend
[root@docker webserver-backend1]# rm -rf  webserver-backend/Dockerfile  #下载的代码仓库里有一个Dockerfile文件模板,删除它即可
[root@docker webserver-backend1]# cp -r webserver-backend/* .
[root@localhost webserver-backend1]# rm -rf webserver-backend     #删除原来下载的代码仓库目录

创建镜像

java 复制代码
docker build -t webserver:backend .
# -t代表指定镜像名称 :后面代表tag .代表使用当前目录下的 Dockerfile文件来创建镜像

检查镜像是否创建成功

java 复制代码
docker image ls            如下,webserver:backend镜像已创建成功
REPOSITORY      TAG          IMAGE ID       CREATED              SIZE
webserver       backend      b15f5ab37e04   About a minute ago   86.4MB

运行容器

java 复制代码
docker run -itd --name webserver-backend -p 8090:8000 webserver:backend 

检查容器状态

java 复制代码
[root@localhost webserver-backend]# docker ps -a   
CONTAINER ID   IMAGE               COMMAND                   CREATED          STATUS                      PORTS                                       NAMES
1b6fae5979da   webserver:backend   "python manage.py ru..."   8 seconds ago    Up 7 seconds                0.0.0.0:8090->8000/tcp, :::8090->8000/tcp   webserver-backend

访问该端口

java 复制代码
http://192.168.145.211:8090   如下图,访问成功。说明自定义镜像运行容器成功

八、多阶段构建镜像

下载nginx镜像

java 复制代码
docker pull nginx

克隆前端仓库

java 复制代码
git clone https://gitee.com/mirschao/webserver-vue.git

创建镜像文件

java 复制代码
cd webserver-vue
vim Dockerfile
FROM node
COPY ./ /app                         
WORKDIR /app                       #转换工作目录
RUN npm install && npm run build   #进行产物的编译生成

FROM nginx                         #再基于nginx镜像
RUN mkdir /app                        
COPY --from=0 /app/dist /app      #拷贝node镜像的产物
COPY default.conf /etc/nginx/conf.d/default.conf                

注:即符合了前端的一个node.js环境,又符合了我们尽量降低一个镜像的大小

创建镜像

java 复制代码
docker build -t vue-project:v1.0 .
#这里会报错没有nginx.conf文件
解决方案:
最好的方法就是基于nginx镜像创建一个容器,然后进去该容器将nginx的配置文件拷贝到宿主机上(拷贝到当前目录)
 docker cp nginx-web:/etc/nginx/conf.d/default.conf .
 vim default.conf                   #进入配置文件修改主目录位置。让nginx可以正常读取dist
  location / {
        root   /app;
        index  index.html;
        try_files $uri $uri/ /index.html;
    }
然后再次创建镜像 

查看镜像

java 复制代码
[root@localhost webserver-vue]# docker image ls
REPOSITORY    TAG          IMAGE ID       CREATED          SIZE
vue-project   v1.0         05332f18b954   20 seconds ago   143MB

运行容器

java 复制代码
docker run -itd --name vue-project -p 80:80 vue-project:v1.0

真机浏览器访问

java 复制代码
http://192.168.145.211:80       访问成功

九、Dcoker-compose 简要描述

1.作用

可以对容器进行编排,和k8s功能一样

2.安装

docker-compose版本:v2.24.5,其它版本可以自行修改

官网下载(可能比较慢,不推荐)

java 复制代码
#使用curl下载
curl -SL https://github.com/docker/compose/releases/download/v2.15.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
chmod a+x /usr/local/bin/docker-compose


#使用wget下载
wget https://github.com/docker/compose/releases/download/v2.24.5/v2.15.1/docker-compose-linux-x86_64
mv docker-compose-linux-x86_64  /usr/local/bin/docker-compose
chmod a+x /usr/local/bin/docker-compose

也可以官网二进制文件手动下载到宿主机上 然后上传到linux中

Releases · docker/compose · GitHub

在github releases中,下载如上图所示的docker-compose-linux-x86_64二进制文件,不同系统可根据需要自行选择

java 复制代码
# 假设下载后文件上传到某个目录,然后移动到/usr/local/bin目录
mv docker-compose-linux-x86_64  /usr/local/bin/docker-compose
chmod a+x /usr/local/bin/docker-compose

网盘下载

链接:百度网盘 请输入提取码 提取码:zual
验证Docker-compose

java 复制代码
[root@docker ~]# docker-compose -v
Docker Compose version v2.24.5

至此,docker-compose安装完成了。

注:新版本的Docker CE 已经包含了docker compose,作为插件存在,docker-compose-plug,是不需要安装docker-compose,所以如果安装了新版本的docker-ce,是不需要再次单独安装了。

3.编排启动镜像

创建目录

java 复制代码
mkdir -p /opt/docker-compose/wordpress

编写docker-compose.yaml文件

java 复制代码
vim /opt/docker-compose/wordpress/docker-compose.yaml
services:
   db:
     image: mysql:5.7
     volumes:
       - /data/db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress
   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     volumes:
       - /data/web_data:/var/www/html
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress

执行yam文件,效果如下

java 复制代码
[root@docker ~]# cd /opt/docker-compose/wordpress
[root@docker wordpress]# docker-compose up -d
[+] Running 34/34
 ✔ db 11 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿]      0B/0B      Pulled                                                                                                             39.3s 
   ✔ 72a69066d2fe Pull complete                                                                                                                                   1.5s 
   ✔ 93619dbc5b36 Pull complete                                                                                                                                   0.5s 
   ✔ 99da31dd6142 Pull complete                                                                                                                                   0.7s 
   ✔ 626033c43d70 Pull complete                                                                                                                                   2.0s 
   ✔ 37d5d7efb64e Pull complete                                                                                                                                   1.2s 
   ✔ ac563158d721 Pull complete                                                                                                                                   2.2s 
   ✔ d2ba16033dad Pull complete                                                                                                                                   2.5s 
   ✔ 0ceb82207cd7 Pull complete                                                                                                                                   2.5s 
   ✔ 37f2405cae96 Pull complete                                                                                                                                  11.0s 
   ✔ e2482e017e53 Pull complete                                                                                                                                   3.2s 
   ✔ 70deed891d42 Pull complete                                                                                                                                   3.1s 
 ✔ wordpress 21 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿]      0B/0B      Pulled                                                                                            46.6s 
   ✔ a2abf6c4d29d Already exists                                                                                                                                  0.0s 
   ✔ c5608244554d Pull complete                                                                                                                                   3.6s 
   ✔ 2d07066487a0 Pull complete                                                                                                                                  10.4s 
   ✔ 1b6dfaf1958c Pull complete                                                                                                                                   4.5s 
   ✔ 32c5e6a60073 Pull complete                                                                                                                                   6.9s 
   ✔ 90cf855b27cc Pull complete                                                                                                                                   7.6s 
   ✔ 8b0f1068c586 Pull complete                                                                                                                                   8.2s 
   ✔ 5355461305e8 Pull complete                                                                                                                                   9.6s 
   ✔ ad1eec592342 Pull complete                                                                                                                                  10.2s 
   ✔ e03fbc76cb78 Pull complete                                                                                                                                  11.3s 
   ✔ 1f5796e48b39 Pull complete                                                                                                                                  11.0s 
   ✔ 72fbe8e1d4e7 Pull complete                                                                                                                                  11.5s 
   ✔ 96edece66175 Pull complete                                                                                                                                  11.5s 
   ✔ 5f46f0743de2 Pull complete                                                                                                                                  13.0s 
   ✔ c9f9671a5e1f Pull complete                                                                                                                                  12.6s 
   ✔ 3f543dcd35b1 Pull complete                                                                                                                                  12.0s 
   ✔ c88e21a0c2a0 Pull complete                                                                                                                                  12.7s 
   ✔ 964b4457a910 Pull complete                                                                                                                                  13.1s 
   ✔ 0d55fb9a64ef Pull complete                                                                                                                                  13.8s 
   ✔ fb009ff7c567 Pull complete                                                                                                                                  13.6s 
   ✔ 4f058a67a50d Pull complete                                                                                                                                  13.7s 
[+] Running 2/3
 ⠹ Network wordpress_default        Created                                                                                                                      10.5s 
 ✔ Container wordpress-db-1         Started                                                                                                                       5.7s 
 ✔ Container wordpress-wordpress-1  Started                                                                                                                       8.8s 
[root@docker wordpress]# 

查看容器

java 复制代码
[root@docker wordpress]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                              PORTS               NAMES
3c2fb07b1550        wordpress:latest    "docker-entrypoint..."   5 minutes ago       Restarting (1) About a minute ago                       wordpress-wordpress-1
01ac204aa598        mysql:5.7           "docker-entrypoint..."   5 minutes ago       Restarting (1) About a minute ago                       wordpress-db-1
[root@docker wordpress]# 

☆☆☆这里查看容器一直处于重启状态,查看容器日志

java 复制代码
[root@docker wordpress]# docker logs wordpress-db-1 
2024-04-11 17:03:38+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.36-1debian10 started.
chown: changing ownership of '/var/lib/mysql/': Permission denied
2024-04-11 17:03:39+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.36-1debian10 started.
chown: changing ownership of '/var/lib/mysql/': Permission denied

这里发现报错"chown: changing ownership of '/var/lib/mysql/': Permission denied" **,**很显然,是mysql容器中/var/lib/mysql/没有权限。

那么目标就很明显了,赋予容器这个权限。

一般来说,无法访问目录,权限拒绝。该问题通常在centos7下出现。或者一个容器启动成功后,里面的服务无法成功访问,这是因为centos7中的安全模块selinux把权限禁掉了,一般的解决方案有以下两种:

(1)临时关闭selinux

直接在centos服务器上执行以下命令即可。执行完成以后建议重新docker run。

setenforce 0

(2)给容器加权限

在docker run时给该容器加权限,加上以下参数即可:

--privileged=true


由于这里是yaml文件启动,所以选择第一种(1)临时关闭selinux,

再使用docker-compose down命令停止并删除compose应用程序的所有容器、网络和卷,

再重新执行docker-compose up -d,

最后查看容器状态,启动成功。

java 复制代码
[root@docker wordpress]# setenforce 0

[root@docker wordpress]# docker-compose down
[+] Running 3/0
 ✔ Container wordpress-wordpress-1  Removed                                                                                                                      0.0s 
 ✔ Container wordpress-db-1         Removed                                                                                                                      0.0s 
 ✔ Network wordpress_default        Removed             

[root@docker wordpress]# docker-compose up -d
[+] Running 2/3
 ⠇ Network wordpress_default        Created                                                                                                                      3.1s 
 ✔ Container wordpress-db-1         Started                                                                                                                      0.8s 
 ✔ Container wordpress-wordpress-1  Started                                                                                                                      2.9s 
[root@docker wordpress]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
dba04e14864a        wordpress:latest    "docker-entrypoint..."   8 seconds ago       Up 4 seconds        0.0.0.0:8000->80/tcp   wordpress-wordpress-1
9390ecdfddd5        mysql:5.7           "docker-entrypoint..."   8 seconds ago       Up 7 seconds        3306/tcp, 33060/tcp    wordpress-db-1

浏览器访问8000端口,如下图,wordpress访问成功

相关推荐
yudiandian20144 分钟前
Red Hat 和 Debian Linux 对比
linux·运维·debian
木子欢儿5 分钟前
在 Debian 12 上安装 Java 21
java·运维·开发语言·debian
Sunsets_Red37 分钟前
Linux 系统
linux·运维·服务器·c++·学习·系统架构·系统安全
西京刀客44 分钟前
linux的redir命令实现端口转发
linux·运维·tcp·流量转发
繁依Fanyi1 小时前
828 华为云征文|华为 Flexus 云服务器打造 Laverna 在线笔记应用
运维·服务器·笔记·python·算法·华为·华为云
即兴小索奇1 小时前
linux如何查看当前的目录所在位置
linux·运维·服务器
一瓢一瓢的饮 alanchan4 小时前
【运维监控】influxdb 2.0 + grafana 11 监控jmeter 5.6.3 性能指标(2)
运维·jmeter·grafana·监控·influxdb·运维监控
___波子 Pro Max.4 小时前
Docker镜像和容器
docker
CodeHackerBhx4 小时前
如何使用VMware安装Linux操作系统
linux·运维·服务器
PythonFun5 小时前
如何快速找回Finalshell中VPS的SSH密码
运维·ssh