教会前端工程师对docker的使用

一、centos安装docker

  • 1、移除之前的安装的

    yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-selinux \
    docker-engine-selinux \
    docker-engine
    
  • 2、删除文件

    rm -rf /etc/systemd/system/docker.service.d
    rm -rf /var/lib/docker
    rm -rf /var/run/docker
    rm -rf /usr/local/docker
    rm -rf /etc/docker
    
  • 3、安装一些必要的系统工具

    yum -y install yum-utils device-mapper-persistent-data lvm2
    
  • 4、添加软件源信息:

    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
  • 5、更新yum缓存:

    yum makecache fast
    
  • 6、安装Docker-ce

    yum -y install docker-ce
    
  • 7、启动 Docker 后台服务:

    systemctl start docker
    
  • 8、查看当前版本

    docker -v
    
  • 9、配置哪里的镜像源官网地址

二、docker中常见的命令

  • 1、启动docker

    systemctl start docker
    
  • 2、停止docker

    systemctl stop docker
    
  • 3、重启docker

    systemctl restart docker
    
  • 4、查看全部的镜像

    docker images
    docker image ls
    
  • 5、查看容器

    docker container ps -a
    docker ps -a
    
  • 6、停止全部的容器

    docker kill $(docker ps -a -q)
    
  • 7、删除全部的容器

    docker rm $(docker ps -a -q)
    
  • 8、停止容器

    docker stop 容器的id
    
  • 9、查看容器

    docker ps -a 查看全部的容器
    docker ps -l 查看最后一个容器
    
  • 10、进入一个容器

    docker attach 容器id
    

三、启动容器的几种方式

  • 1、下载一个容器

    docker pull ubuntu
    
  • 2、直接运行容器并且输入一句话

    docker run ubuntu /bin/echo "Hello world"
    
  • 3、以命令行模式进入该容器

    docker run -it ubuntu /bin/bash
    docker run -i -t 容器名称 /bin/bash
    
  • 4、后台启动一个nginx并且对外暴露的端口80映射到主机上的9000上,别名是my_nginx

    docker run -d --name my_nginx -p 9000:80 nginx
    
  • 5、关于运行的参数说明

    NO.参数含义
    1-i --interactive交互式
    2-t --tty分配一个伪终端
    3-d --detach运行容器到后台【后台运行】
    4-a --attach list附加到运行的容器
    5-e --env list设置容器的变量
    6-p --publish list发布容器终端到主机【暴露端口】
    7-P–publish-all
    8–mount mount挂载宿主机分区到容器
    9-v --volumn list挂载宿主机分区到容器

四、关于数据盘(卷)的认识

  • 1、为什么要有数据盘的

    删除容器的时候,容器层里创建的文件也会被删除掉,如果有些数据你想永久保存,比如Web服务器的日志,数据库管理系统中的数据,可以为容器创建一个数据盘。

  • 2、创建数据卷

    docker volume --help
    docker volume create nginx_html # 创建数据卷
    docker volume ls # 查看本地创建的数据卷
    docker volume inspect nginx_html # 查看数据卷的位置
    
  • 3、将本地的数据卷挂载到nginx

    docker run -d --name my_nginx -p 9000:80 --mount src=nginx_html,dst=/usr/share/nginx/html nginx  # 将本地的nginx_html与nginx的容器中的/usr/share/nginx/html中建立关联【我们可以直接在nginx_html的目录下操作容器中的文件】
    # 方式二
    docker run -d --name my_nginx1 -p 8000:80 -v nginx_html:/usr/share/nginx/html nginx
    
  • 4、删除数据卷【先删除容器才可以删除的】

    docker volume ls # 查看全部的数据卷
    docker volume ls -f dangling=true #列出已经孤立的数据盘
    docker stop $(docker ps -a -q)
    docker rm $(docker ps -a -q)
    docker volume rm nginx_html
    
  • 5、指定文件夹作为数据卷

    mkdir ~/data # 本地创建一个文件夹
    docker run -v ~/data:/mnt -it --name logs centos bash # 将本地的文件夹data映射到容器中的mnt文件夹并且进入终端
    

五、使用docker部署应用

部署MySQL
  • 1、搜索mysql的镜像

    docker search mysql
    
  • 2、下载镜像

    docker pull mysql
    
  • 3、本地创建文件夹作为数据卷的文件夹

    mkdir ~/mysql
    cd ~/mysql
    
  • 4、进入本地数据卷的文件夹下启动容器

    docker run -d \
    -p 3307:3306 \
    --name mysql1 \
    -v $PWD/conf:/ect/mysql/conf.d \
    -v $PWD/logs:/logs \
    -v $PWD/data:/var/lib/mysql \
    -e MYSQL_ROOT_PASSWORD=123456 \
    mysql
    
    • 参数说明
      • -p 3307:3306:将容器中的3306端口映射到主键的3307上面
      • -v $PWD/conf:/ect/mysql/conf.d :将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。配置目录
      • -v $PWD/logs:/logs:将主机当前目录下的 logs 目录挂载到容器的 /logs。日志目录
      • -v $PWD/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。数据目录
      • **-e MYSQL_ROOT_PASSWORD=123456:**初始化 root 用户的密码。
  • 5、进入容器中操作mysql

    docker exec –it mysql1 /bin/bash
    mysql -u root -p 123456
    show databases
    
  • 6、本地使用navicat for mysql连接mysql发现报错:Client does not support authentication protocol requested by server

  • 7、解决方案

    • 进入容器

      docker exec -it 62349aa31687 /bin/bash
      
    • 进入mysql

      mysql -uroot -p
      
    • 授权

      GRANT ALL ON *.* TO 'root'@'%';
      
    • 刷新授权

      flush privileges;
      
    • 更新加密规则

      ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
      
    • 更新root用户密码

      ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
      
    • 刷新权限

      flush privileges;
      
  • 8、本地测试连接

部署nginx
  • 1、拉取镜像

    docker pull nginx
    
  • 2、创建本地数据卷及创建本地的nginx.conf的文件

    mkdir ~/nginx
    cd ~/nginx
    mkdir conf
    cd conf
    vim nginx.conf
    
  • 3、nginx.conf的文件内容

    user  nginx;
    worker_processes  1;
    
    error_log  /var/log/nginx/error.log warn;
    pid        /var/run/nginx.pid;
    
    
    events {
        worker_connections  1024;
    }
    
    
    http {
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;
    
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
    
        access_log  /var/log/nginx/access.log  main;
    
        sendfile        on;
        #tcp_nopush     on;
    
        keepalive_timeout  65;
    
        #gzip  on;
    
        include /etc/nginx/conf.d/*.conf;
        server {
        		listen 80;
        		server_name localhost;
        		location / {
        			root /usr/share/nginx/html;
        		  index index.html
        		}
        }
    }
    
  • 4、进入~/nginx的文件夹下启动容器

    docker run -d \
    -p 9000:80 \
    --name my_nginx \
    -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
    -v $PWD/logs:/var/log/nginx \
    -v $PWD/html:/usr/share/nginx/html \
    nginx
    
  • 5、进入~/nginx/html文件夹下创建并且写入一句话

    echo index > index.html
    
  • 6、直接访问

  • 7、如果修改了nginx的配置文件,直接重启容器就可以

    docker restart 容器id
    
部署Redis
  • 1、下载镜像

    docker pull redis:5.0
    
  • 2、创建容器及设置端口的映射

    docker run -id --name my_redis -p 6379:6379 redis:5.0
    
  • 3、外部连接容器中的redis

    redis-cli -h ip地址 -p 6379
    
  • 4、如果在宿主机上要访问redis

    docker exec -it 容器id redis-cli
    

六、Dockerfile文件的编写

  • 1、docker的镜像是分层操的

    docker inspect centos # 查看分层
    
  • 2、dockerfile文件中命令含义

    关键字作用备注
    FROM指定父镜像指定dockerfile基于那个image构建
    MAINTAINER作者信息用来标明这个dockerfile谁写的
    LABEL标签用来标明dockerfile的标签 可以使用Label代替Maintainer 最终都是在docker image基本信息中可以查看
    RUN执行命令执行一段命令 默认是/bin/sh 格式: RUN command 或者 RUN [“command” , “param1”,“param2”]
    CMD容器启动命令提供启动容器时候的默认命令 和ENTRYPOINT配合使用.格式 CMD command param1 param2 或者 CMD [“command” , “param1”,“param2”]
    ENTRYPOINT入口一般在制作一些执行就关闭的容器中会使用
    COPY复制文件build的时候复制文件到image中
    ADD添加文件build的时候添加文件到image中 不仅仅局限于当前build上下文 可以来源于远程服务
    ENV环境变量指定build时候的环境变量 可以在启动的容器的时候 通过-e覆盖 格式ENV name=value
    ARG构建参数构建参数 只在构建的时候使用的参数 如果有ENV 那么ENV的相同名字的值始终覆盖arg的参数
    VOLUME定义外部可以挂载的数据卷指定build的image那些目录可以启动的时候挂载到文件系统中 启动容器的时候使用 -v 绑定 格式 VOLUME [“目录”]
    EXPOSE暴露端口定义容器运行的时候监听的端口 启动容器的使用-p来绑定暴露端口 格式: EXPOSE 8080 或者 EXPOSE 8080/udp
    WORKDIR工作目录指定容器内部的工作目录 如果没有创建则自动创建 如果指定/ 使用的是绝对地址 如果不是/开头那么是在上一条workdir的路径的相对路径
    USER指定执行用户指定build或者启动的时候 用户 在RUN CMD ENTRYPONT执行的时候的用户
    HEALTHCHECK健康检查指定监测当前容器的健康监测的命令 基本上没用 因为很多时候 应用本身有健康监测机制
    ONBUILD触发器当存在ONBUILD关键字的镜像作为基础镜像的时候 当执行FROM完成之后 会执行 ONBUILD的命令 但是不影响当前镜像 用处也不怎么大
    STOPSIGNAL发送信号量到宿主机该STOPSIGNAL指令设置将发送到容器的系统调用信号以退出。
    SHELL指定执行脚本的shell指定RUN CMD ENTRYPOINT 执行命令的时候 使用的shell
  • 3、.dockerignore文件

    表示要排除,不要打包的image中的文件路径

自己动手写一个Dockerfile文件
  • 1、在本地(或者服务器)中安装node【使用nvm方式

  • 2 、安装express项目生成器生成一个基础项目

    npm install express-generator -g
    express app
    
  • 3、在项目的外面创建一个Dockerfile的文件

    touch Dockerfile
    
    ├── app # 脚手架自动生成的项目文件夹
    │   ├── app.js
    │   ├── bin
    │   │   └── www
    │   ├── package.json
    │   ├── public
    │   │   ├── images
    │   │   ├── javascripts
    │   │   └── stylesheets
    │   │       └── style.css
    │   ├── routes
    │   │   ├── index.js
    │   │   └── users.js
    │   └── views
    │       ├── error.jade
    │       ├── index.jade
    │       └── layout.jade
    └── Dockerfile # 需要自己写的Dockerfile文件
    
    # Dockerfile文件
    FROM node
    COPY ./app /app
    WORKDIR /app
    RUN npm install
    EXPOSE 3000
    
    • FROM 表示该镜像继承的镜像 :表示标签
    • COPY 是将当前目录下的app目录下面的文件都拷贝到image里的/app目录中
    • WORKDIR 指定工作路径,类似于执行 cd 命令
    • RUN npm install 在/app目录下安装依赖,安装后的依赖也会打包到image目录中
    • EXPOSE 暴露3000端口,允许外部连接这个端口
  • 4、创建image【需要漫长的等待】

    docker build -t my_app1 . # -t后面写自己定义镜像的名字 .表示将Dockerfile文件的所有路径
    
  • 5、使用镜像生成一个容器

    docker run -it -p 3333:3000 my_app1 /bin/bash
    npm run start
    
  • 6、客户端直接访问

  • 7、在Dockerfile文件中配置CMD命令在启动容器的时候就运行命令

    FROM node
    COPY ./app /app
    WORKDIR /app
    RUN npm install
    CMD npm run start
    EXPOSE 3000
    
    • RUN命令在image 文件的构建阶段执行,执行结果都会打包进入image 文件;CMD命令则是在容器启动后执行
    • 一个 Dockerfile 可以包含多个RUN命令,但是只能有一个CMD命令
    • 指定了CMD命令以后,docker container run命令就不能附加命令了(比如前面的/bin/bash),否则它会覆盖CMD命令
  • 8、重新构建成镜像

  • 9、创建容器

    docker run -d -p 4000:3000  my_app1
    

七、发布自己构建的镜像

  • 1、先到官网注册账号

  • 2、登录及发布镜像

    docker login # 登录hub.docker
    docker image tag [imageName] [username]/[repository]:[tag]
    docker image build -t [username]/[repository]:[tag] .
    
    docker tag my_app1 kuangshp/my_app1:1.0.0 
    docker push kuangshp/my_app1:1.0.0
    

八、docker-compose的使用

  • 1、compose的作用

    compose是通过一个docker-compose.yml的文件来关联多个docker的容器(间接意思就是管理多个镜像,毕竟容器是由镜像生成的),在配置文件中,所有容器通过**services**来定义,然后使用docker-compose脚本来启动、停止、重启应用(只适合单机版)。

    主要包括的内容

    • services可以定义需要的服务,每个服务都有自己的名字,使用的镜像、挂载的数据卷、网络、依赖别的服务
    • networks是应用网络
    • volumes是数据卷,可以在此定义数据卷,然后挂载到不同的服务上面使用。
  • 2、安装

    sudo curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    # 添加可执行权限
    sudo chmod +x /usr/local/bin/docker-compose
    # 查看版本信息 
    docker-compose -version
    # 二进制包方式安装的,删除二进制文件即可
    rm /usr/local/bin/docker-compose
    
  • 3、docker-compose.yml的文件配置

    • 空格缩进表示层次
    • 冒号空格后面有空格
    # 模拟写一个docker-compose.yml文件
    version: '2'
    services:
    	name1:
    		image: nginx
    		port:
    			- "8080:80"
    	name2:
    		image: nginx
    		port:
    			- "9000:80"
    		depends_on: # 依赖name1的容器
    			- name1
    	name3:
    		image: mysql
    		port: 
    			- "3306:3306"
    		networks: # 配置网络
    		  - "networksname"
    		volumes: # 配置数据卷
    			- db: /var/lib/mysql
    networks: # 自定义网络别名
    	networksname:
    		driver: bridge
    volumes: # 自定义数据卷别名
    	db:
    		driver: local
    
  • 4、常见的docker-compose的命令

    docker-compose up #启动所有的服务
    docker-compose -d #后台启动所有的服务
    docker-compose ps #打印所有的容器
    docker-compose stop #停止所有服务
    docker-compose logs -f #持续跟踪日志
    docker-compose exec zfpx1 bash #进入zfpx服务系统
    docker-compose rm #删除服务容器
    docker network ls #网络不会删除
    docker-compose down #删除网路
    

九、使用docker-compose部署项目

项目一(利用前面使用的Dockerfile打包生成的镜像my_app1
  • 1、创建一个文件夹里面的文件目录如下

    ├── docker-compose.yml
    └── nginx
        └── conf.d
            └── test.conf
    
  • 2、docker-compose.yml的文件内容如下

    version: "3"                                                                                                           
    services:                                                                                                              
      nginx:                                                                                                               
        image: nginx                                                                                                       
        ports:                                                                                                             
          - 8000:80 # nginx对外访问的端口是8000                                                                                                       
        links:                                                                                                             
          - app                                                                                                            
        volumes:                                                                                                           
          - ./nginx/conf.d:/etc/nginx/conf.d   # 配置数据卷的映射                                                                         
      app:                                                                                                                 
        image: my_app1  # 自己build出来的镜像                                                                                                   
        ports:                                                                                                             
          - 3000:3000
    
  • 3、test.conf的文件配置反向代理到my_app1启动的node项目

    server {                                                                                                               
            listen 80;    # 注意这个地方不是8000                                                                                                 
            access_log off;                                                                                                
                                                                                                                           
            location / {                                                                                                                                                                                       
                    proxy_pass http://app:3000;                                                                            
            }                                                                                                              
    } 
    
  • 4、启动

    docker-compose.yml up
    docker-compose.yml up -d # 表示在后台启动,看不到输出日志
    
  • 5、启动后查看docker启动的容器

    [root@bogon conf.d]# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
    566cf1648b5f        nginx               "nginx -g 'daemon of…"   16 minutes ago      Up 11 minutes       0.0.0.0:8000->80/tcp     docker_compose_nginx_1
    86740bc0bd9e        my_app1             "docker-entrypoint.s…"   16 minutes ago      Up 11 minutes       0.0.0.0:3000->3000/tcp   docker_compose_app_1
    
  • 6、浏览器中直接访问8000端口

项目二(不使用本地的镜像,而是直接使用源代码+Dockerfile文件来构建)
  • 1、使用express生成的一个app1的项目,直接在项目外面docker-compose.yml

    ├── app1
    │   ├── app.js
    │   ├── bin
    │   │   └── www
    │   ├── package.json
    │   ├── public
    │   │   ├── images
    │   │   ├── javascripts
    │   │   └── stylesheets
    │   │       └── style.css
    │   ├── routes
    │   │   ├── index.js
    │   │   └── users.js
    │   └── views
    │       ├── error.jade
    │       ├── index.jade
    │       └── layout.jade
    ├── docker-compose.yml
    ├── Dockerfile
    └── nginx
        └── conf.d
            └── test.conf
    
  • 2、test.conf和上面一样的

  • 3、Dockerfile文件告诉docker如何来生成一个镜像

    FROM node                                                                                                              
    COPY ./app1 /app   # 把当前的app1文件拷贝到镜像中的app文件夹下                                                                                                 
    WORKDIR /app                                                                                                           
    RUN npm install                                                                                                        
    CMD npm run start                                                                                                      
    EXPOSE 3000 
    
  • 4、docker-compose.yml来管理nginx镜像和项目文件

    version: "3"                                                                                                           
    services:                                                                                                              
      nginx:                                                                                                               
        image: nginx                                                                                                       
        ports:                                                                                                             
          - 8000:80                                                                                                        
        links:                                                                                                             
          - app                                                                                                            
        volumes:                                                                                                           
          - ./nginx/conf.d:/etc/nginx/conf.d                                                                               
        container_name: nginx11                                                                                            
      app:                                                                                                                 
        build: .                                                                                                           
        ports:                                                                                                             
          - 3000:3000                                                                                                      
        container_name: app 
    
  • 5、查看已经启动的容器

    [root@bogon docker_compose_test1]# docker ps 
    CONTAINER ID        IMAGE                      COMMAND                  CREATED             STATUS              PORTS                    NAMES
    4afdaccab8db        nginx                      "nginx -g 'daemon of…"   8 minutes ago       Up 8 minutes        0.0.0.0:8000->80/tcp     nginx11
    98772bc2f24d        docker_compose_test1_app   "docker-entrypoint.s…"   8 minutes ago       Up 8 minutes        0.0.0.0:3000->3000/tcp   app
    
  • 6、在浏览器上直接访问8000端口

项目三

我们希望在node中连接mysql数据库进行增删改查的操作,使用nginx来处理静态文件资源

  • 1、项目的目录结构如下

    ├── docker-compose.yml
    └── images
        ├── mysql
        ├── nginx
        │   └── conf.d
        │       └── test.conf
        └── node
            ├── Dockerfile
            └── web
                ├── package.json
                ├── package-lock.json
                ├── public
                │   └── index.html
                └── server.js
    
  • 2、在images/node/web/server.js中我们创建一个最基本的连接mysql的命令

    const http = require('http');
    const mysql = require('mysql');
    const connection = mysql.createConnection({
      host: 'db',
      user: 'root',
      password: '123456',
      database: 'nodeapp'
    })
    http.createServer(function (req, res) {
      connection.query('select 1 + 1 as total', function (err, results, fields) {
        if (err) {
            console.log(err);
            res.end('error');
        }
        res.end('total' + results[0].total);
      })
    }).listen(8811, () => console.log('服务已经启动:localhost:8811'));
    
  • 3、使用命令的方式直接在public/index.html中写入内容

    echo index > index.html
    
  • 4、配置nginx的配置文件

    server {
            listen 80;
            location / {
                    root /public;
                    index index.html;
            }
    
            location /api {
                    proxy_pass http://node:8811;
            }
    
    }
    
  • 5、Dockerfile文件编写,将node项目制做成一个镜像

    FROM node
    COPY ./web /web
    WORKDIR /web
    RUN npm install
    CMD npm start
    
  • 6、docker-compose.yml统一镜像文件编写

    version: "3"                                                                                                           
    services:                                                                                                              
      db:                                                                                                                  
        image: mysql                                                                                                       
        environment:                                                                                                       
          MYSQL_ROOT_PASSWORD: "123456"                                                                                    
          MYSQL_DATABASE: "nodeapp"                                                                                        
        volumes:                                                                                                           
          - ./images/mysql/data:/var/lib/mysql                                                                             
          - ./images/mysql/conf:/etc/mysql/conf.d                                                                          
          - ./images/mysql/logs:/log
        container_name: nodeapp_db                                                                                         
      node:                                                                                                                
        build:                                                                                                             
          context: "./images/node"                                                                                         
          dockerfile: Dockerfile                                                                                           
        depends_on:                                                                                                        
          - db                                                                                                             
        container_name: nodeapp_node                                                                                       
      web:                                                                                                                 
        image: nginx                                                                                                       
        ports:                                                                                                             
          - 8089:80     # nginx对外的端口是8089                                                                                                   
        depends_on:                                                                                                        
          - node                                                                                                           
        volumes:                                                                                                           
          - ./images/nginx/conf.d:/etc/nginx/conf.d                                                                        
          - ./images/node/web/public:/public                                                                               
        container_name: nodeapp_web
    
  • 7、使用docker-compose up启动工程

  • 8、直接在浏览器上输入localhost:8089返回的是index

  • 9、不出意外的你在浏览器上输入localhost:8090/apidocker的输出日志会报错。原因在于你要先进入mysql的容器中修改下权限。方法和上面的docker部署mysql的解决方案一样的。

  • 10、解决上面mysql错误的还有一种方案推荐使用

    • mysql这个文件夹下创建一个init/init.sql的文件

      # cat init/init.sql 
      use mysql;
      ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; # 放开root登入权限
      flush privileges; # 刷新
      
    • 修改docker-compose.yml配置

      version: "3"                                                                                                           
      services:                                                                                                              
        db:                                                                                                                  
          image: mysql                                                                                                       
          environment:                                                                                                       
            MYSQL_ROOT_PASSWORD: "123456"                                                                                    
            MYSQL_DATABASE: "nodeapp"                                                                                        
          volumes:                                                                                                           
            - ./images/mysql/data:/var/lib/mysql                                                                             
            - ./images/mysql/conf:/etc/mysql/conf.d                                                                          
            - ./images/mysql/logs:/log                                                                                       
            - ./images/mysql/init:/docker-entrypoint-initdb.d    # 与之前的配置就添加了这行                                                            
          container_name: nodeapp_db                                                                                         
        node:                                                                                                                
          build:                                                                                                             
            context: "./images/node"                                                                                         
            dockerfile: Dockerfile                                                                                           
          depends_on:                                                                                                        
            - db                                                                                                             
          container_name: nodeapp_node                                                                                       
        web:                                                                                                                 
          image: nginx                                                                                                       
          ports:                                                                                                             
            - 8089:80                                                                                                        
          depends_on:                                                                                                        
            - node                                                                                                           
          volumes:                                                                                                           
            - ./images/nginx/conf.d:/etc/nginx/conf.d                                                                        
            - ./images/node/web/public:/public 
      
    • 使用docker-compose up启动后,浏览器中输入localhost:8089/api直接访问不报错了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水痕01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值