作者: houlijiang

  • 思源笔记 搭建

    docker run -d \
      -v workspace_dir_host:workspace_dir_container \
      -p 6806:6806 \
      -e PUID=1001 -e PGID=1002 \
      b3log/siyuan \
      --workspace=workspace_dir_container \
      --accessAuthCode=xxx
    version: "3.9"
    services:
      main:
        image: b3log/siyuan
        command: ['--workspace=/siyuan/workspace/', '--accessAuthCode=${AuthCode}']
        ports:
          - 6806:6806
        volumes:
          - /siyuan/workspace:/siyuan/workspace
        restart: unless-stopped
        environment:
          # A list of time zone identifiers can be found at https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
          - TZ=${YOUR_TIME_ZONE}
          - PUID=${YOUR_USER_PUID}  # 自定义用户 ID
          - PGID=${YOUR_USER_PGID}  # 自定义组 ID
  • 最好用的免费开源博客系统安装搭建

    下载地址

    blossom-1.16.0-web-blog.zip 1.76 MB

    blossom-1.16.0-web-client.zip 16.53 MB

    服务安装

    docker run -d \
      --name blossom-backend \
      -p 9999:9999 \
      -v /home/bl/:/home/bl/ \
      blossom:latest \
      --spring.datasource.url="jdbc:mysql://192.168.1.110:3306/blossom?useUnicode=true&characterEncoding=utf-8&allowPublicKeyRetrieval=true&allowMultiQueries=true&useSSL=false&&serverTimezone=GMT%2B8" \
      --spring.datasource.username=root \
      --spring.datasource.password=123456
  • javascript 删除数组元素

    在 JavaScript 中,数组是一种常见的数据类型,可以存储多个元素。有时候,我们需要从数组中删除某些特定的元素。本文将介绍如何使用 JavaScript 删除数组中指定的元素。

    1.使用splice()方法删除元素

    JavaScript 中的 splice() 方法可用于在数组中添加或删除元素。如果我们需要删除数组中的元素,可以使用 splice() 方法。该方法接受两个参数,第一个参数指定要删除的元素的位置,第二个参数指定要删除的元素个数。例如,我们可以使用以下代码删除数组中的第二个元素:

    let myArray = ["apple", "banana", "orange", "grape"];
    myArray.splice(1, 1);
    console.log(myArray); // ["apple", "orange", "grape"]

    输出结果为:["apple", "orange", "grape"]

    2.使用filter()方法删除元素

    除了使用 splice() 方法,我们还可以使用 filter() 方法来删除数组中的元素。该方法可用于创建一个新的数组,其中包含符合特定条件的元素。我们可以使用以下代码删除数组中的所有 “banana” 元素:

    let myArray = ["apple", "banana", "orange", "grape"];
    myArray = myArray.filter(function(item) {
      return item !== "banana"
    });
    console.log(myArray); // ["apple", "orange", "grape"]

    输出结果为:["apple", "orange", "grape"]

    3.使用pop()和shift()方法删除元素

    pop() 和 shift() 方法可用于删除数组的最后一个元素和第一个元素。如果我们想删除数组中的特定元素,可以使用这些方法与 indexOf() 方法结合使用。例如,以下代码可以删除数组中的第二个元素:

    let myArray = ["apple", "banana", "orange", "grape"];
    let index = myArray.indexOf("banana");
    if (index !== -1) {
      myArray.splice(index, 1);
    }
    console.log(myArray); // ["apple", "orange", "grape"]

    输出结果为:["apple", "orange", "grape"]

    4.使用slice()方法删除元素

    slice() 方法是一个纯函数,它不会改变原始数组,而是返回一个新的数组,该数组包含从开始到结束(不包含结束)的元素。我们可以使用以下代码删除数组中的第二个元素:

    let myArray = ["apple", "banana", "orange", "grape"];
    let newArray = myArray.slice(0, 1).concat(myArray.slice(2));
    console.log(newArray); //["apple", "orange", "grape"]

    输出结果为:["apple", "orange", "grape"]

    5.使用ES6的filter()方法删除元素

    ES6 中的 filter() 方法也可以用于删除数组中的元素。我们可以使用以下代码删除数组中的所有 “banana” 元素:

    let myArray = ["apple", "banana", "orange", "grape"];
    myArray = myArray.filter(item => item !== "banana");
    console.log(myArray); // ["apple", "orange", "grape"]

    输出结果为:["apple", "orange", "grape"]

    总结 以上是 JavaScript 删除数组中指定元素的多种方法。我们可以根据需求选择适合自己的方法来删除数组中的元素。希望这篇文章能够帮助你更好地掌握 JavaScript 中的数组操作。

  • CSS 设置垂直居中

    一、设置文字垂直居中

    1、line-height 使文字垂直居中

    
    <template>
        <div class="container">
            line-height 使文字垂直居中
        </div>
    </template>
    
    <style>
        .container{
            margin: 20px 0px;
            width: 100%;
            height: 100px;
            line-height: 100px;
            background-color: pink;
        }
    </style>

    2、flex布局 使文字垂直居中

    
    <template>
        <div class="container">
            flex布局 使文字垂直居中
        </div>
     </template>
    
    <style>
        .container{
            margin: 20px 0px;
            width: 100%;
            height: 100px;
            display: flex;
            align-items: center;
            background-color: pink;
        }
     </style>

    3、使用display和vertical-align 使文字垂直居中

    3.1 display: table和vertical-align: middle

    
    <template>
        <div class="parent">
            <div class="child">
    
    <div>使用display和vertical-align 使文字垂直居中</div>
    
    <div>使用display和vertical-align 使文字垂直居中</div>
            </div>
        </div>
    </template>
    
    <style>
        .parent {
            display: table;
            width: 100%;
            height: 100px;
            background-color: skyblue;
        }
    
        .child {
            display: table-cell;
            vertical-align: middle;
            background-color: pink;
        }
    </style>

    3.2 display: table-cell和vertical-align: middle

    
    <template>
        <div class="parent">
            <div class="child">
    
    <div>使用display和vertical-align 使文字垂直居中</div>
    
    <div>使用display和vertical-align 使文字垂直居中</div>
            </div>
        </div>
    </template>
    
    <style>
        .parent {
            width: 100%;
            height: 100px;
            background-color: skyblue;
            display: table-cell;
            vertical-align: middle;
        }
    
        .child {
            background-color: pink;
        }
    </style>

    二、设置块状元素垂直居中

    1、使用绝对定位和transform 使块状元素垂直居中(未知块状元素高度)

    
    <template>
        <div class="parent">
            <div class="child">
    
    <div>
                    使用绝对定位和transform 使块状元素垂直居中
                </div>
    
    <div>
                    使用绝对定位和transform 使块状元素垂直居中
                </div>
            </div>
        </div>
    </template>
    
    <style>
        .parent {
            width: 100%;
            height: 100vh;
            background-color: skyblue;
        }
    
        .child {
            width: 100%;
            position: absolute;
            top: 50%;
            transform: translate(0, -50%);
            background-color: pink;
        }
    </style>

    2、使用flex布局 使块状元素垂直居中(未知块状元素高度)

    2.1 display: flex和align-items: center

    
    <template>
        <div class="parent">
            <div class="child">
    
    <div>
                    使用flex布局 使块状元素垂直居中
                </div>
    
    <div>
                    使用flex布局 使块状元素垂直居中
                </div>
            </div>
        </div>
    </template>
    
    <style>
        .parent {
            width: 100%;
            height: 100vh;
            display: flex;
            align-items: center;
            background-color: skyblue;
        }
    
        .child {
            width: 100%;
            background-color: pink;
        }
    </style>

    2.2 display: flex和align-self: center

    
    <template>
        <div class="parent">
            <div class="child">
    
    <div>
                    使用flex布局 使块状元素垂直居中
                </div>
    
    <div>
                    使用flex布局 使块状元素垂直居中
                </div>
            </div>
        </div>
    </template>
    
    <style>
        .parent {
            width: 100%;
            height: 100vh;
            display: flex;
            background-color: skyblue;
        }
    
        .child {
            align-self: center;
            width: 100%;
            background-color: pink;
        }
    </style>

    3、使用绝对定位和margin 使块状元素垂直居中(已知块状元素高度)

    3.1 绝对定位和margin: auto

    
    <template>
        <div class="parent">
            <div class="child">
    
    <div>
                    使用绝对定位和margin 使块状元素垂直居中
                </div>
    
    <div>
                    使用绝对定位和margin 使块状元素垂直居中
                </div>
            </div>
        </div>
    </template>
    
    <style>
        .parent {
            width: 100%;
            height: 100vh;
            background-color: skyblue;
        }
    
        .child {
            width: 100%;
            height: 100px;
            position: absolute;
            top: 0;
            bottom: 0;
            left: 0;
            right: 0;
            margin: auto;
            background-color: pink;
        }
    </style>

    3.2 绝对定位和margin-top

    
    <template>
        <div class="parent">
            <div class="child">
    
    <div>
                    使用绝对定位和margin 使块状元素垂直居中
                </div>
    
    <div>
                    使用绝对定位和margin 使块状元素垂直居中
                </div>
            </div>
        </div>
    </template>
    
    <style>
        .parent {
            width: 100%;
            height: 100vh;
            background-color: skyblue;
            position: relative;
        }
    
        .child {
            width: 100%;
            height: 100px;
            position: absolute;
            top: 50%;
            margin-top: -50px;/* 高度的一半 */
            background-color: pink;
        }
    </style>

    4、使用padding 使块状元素垂直居中(已知元素高度)

    
    <template>
        <div class="parent">
            <div class="child">
    
    <div>使用padding 使块状元素垂直居中</div>
    
    <div>使用padding 使块状元素垂直居中</div>
            </div>
        </div>
    </template>
    
    <style>
        .parent {
            width: 100%;
            height: 300px;
            background-color: skyblue;
            padding: 100px 0;
            box-sizing: border-box;
        }
    
        .child {
            position: relative;
            width: 100%;
            height: 100px;
            background-color: pink;
        }
    </style>

    5、使用grid布局 使块状元素垂直居中(未知元素高度)

    
    <template>
        <div class="parent">
            <div class="child">
    
    <div>
                    使用grid布局 使块状元素垂直居中
                </div>
    
    <div>
                    使用grid布局 使块状元素垂直居中
                </div>
            </div>
        </div>
    </template>
    
    <style>
        .parent {
            width: 100%;
            height: 100vh;
            display: grid;
            background-color: skyblue;
        }
    
        .child {
            align-self: center;
            width: 100%;
            background-color: pink;
        }
    </style>

    6、使用伪元素:before 使块状元素垂直居中(未知元素高度)

    
    <template>
        <div class="parent">
            <div class="child">
    
    <div>
                    使用伪元素:before 使块状元素垂直居中
                </div>
    
    <div>
                    使用伪元素:before 使块状元素垂直居中
                </div>
            </div>
        </div>
    </template>
    
    <style>
        .parent {
            width: 100%;
            height: 100px;
            display: block;
            background-color: skyblue;
        }
    
        .parent:before {
            content: '';
            height: 100%;
            display: inline-block;
            vertical-align: middle;
        }
    
        .child {
            width: 100%;
            display: inline-block;
            vertical-align: middle;
            background-color: pink;
        }
    </style>
  • Windows PowerToys:屏幕标尺,测量屏幕上任何内容的像素

    Screen ruler 实用工具

     

    借助Screen ruler,可根据图像边缘检测快速测量屏幕上的像素。 此灵感来自于 Pete Blois 的 Rooler

    如何激活

    使用  ⊞ Win+Ctrl+Shift+ M 激活并选择要使用的工具。 若要关闭,请使用 Esc 或在工具栏中选择 ╳。

    如何使用

    • 边界(虚线正方形符号):这是一个边界框。 使用鼠标单击并拖动。 如果按住 Shift,框将保持原位,直到取消交互。
    • 间距 (╋):同时测量水平与垂直间距。 选择符号并将鼠标移动到目标位置。
    • 水平 (━):仅测量水平间距。 选择符号并将鼠标指针移动到目标位置。
    • 垂直 (┃):仅测量垂直间距。 选择符号并将鼠标指针移动到目标位置。
    • 取消交互:Esc、╳ 或鼠标单击。 单击主鼠标按钮时,测量值将复制到剪贴板。
    工具栏上的控件也可以通过  Ctrl+1/2/3/4 进行选择。

     提示

    使用鼠标滚轮向上滚动,每个滚轮刻度将像素差的阈值增加 15 个单位。 实际上,测量线可能会变长。 向下滚动以反转。

    设置

    从“设置”菜单中,可以配置以下选项:
    设置 说明
    激活快捷方式 用于打开或关闭工具栏的可自定义键盘命令。
    在测量期间连续捕获屏幕 关闭时,该实用工具会对屏幕拍摄一次快照。 启用此功能后,该实用工具将尝试实时检测。 使用连续模式时将消耗更多资源。
    按颜色通道边缘检测 测试所有颜色通道是否在彼此的公差距离内。 如果不是,请检查所有颜色通道差异的总和是否小于容错。
    边缘检测的像素容错 介于 0-255 之间的值。 值越高,差异越高,因此对渐变和阴影等设置的包容性越强。
    在交叉处绘制英尺 添加类似衬线的小“英尺,以获得额外的视觉识别。
    线条颜色 执行测量的线条的颜色。

    安装 PowerToys

    此实用工具是适用于超级用户的 Microsoft PowerToys 实用工具的一部分。 它提供一组有用的实用工具来优化和简化 Windows 体验,以提高工作效率。 若要安装 PowerToys,请参阅安装 PowerToys
  • S3 Browser 下载客户端

    S3 浏览器是适用于 Amazon S3 和 Amazon CloudFront 的免费 Windows 客户端。Amazon S3 提供了一个简单的 Web 服务接口,可用于存储和检索任何金额 的数据,随时随地从 Web 上的任何位置传输。Amazon CloudFront 是一个内容分发网络 (CDN)。 它可用于使用全球边缘站点网络传输您的文件。

     

    https://s3browser.com/download/s3browser-12-0-1.exe

     

    7bc4bea9673584b474684d76afe1d0ea
  • mybatis中foreach使用

    一、foreach 属性使用

    <foreach collection="list" index="index" item="mchntCd" open="(" close=")" separator=",">
       #{mchntCd}
    </foreach>
    
    1. item:  集合中元素迭代时的别名,该参数为必选,通过别名进行取值
    2. index:在list和数组中,index是元素的序号,在map中,index是元素的key,非必填
    3. open: foreach代码的开始符号,一般是(和close=”)”合用。常用在in(),values()时。非必填
    4. separator:元素之间的分隔符,例如在in()的时候,separator=”,”会自动在元素中间用“,“隔开,避免手动输入逗号导致sql错误,如in(1,2,)这样。非必填
    5. close: foreach代码的关闭符号,一般是)和open=”(“合用。常用在in(),values()时。非必填
    6. collection: 要做foreach的对象,作为入参
      1. 传入是集合,也就是接口里面用的  List<String> nameList    那么 使用 collection = “list”
      2. 传入的是数组,接口里面 String[] namestrs ,那么 使用 collection = “array”
      3. 如果传入的是一个实体bean,实体bean里面有一个属性为 list<String> ids 那么collection = “ids ”,如果实体bean中对应ids是一个对象,ids 里面有一个属性为 List<Stirng> usernames,那么collection = “ids.usernames”

    二、代码使用

            1、实体类 list<String>  mchntCds
     mapper接口  —》 list方式
    int queryDiscDerateCount
    (List<String> mchntCds);
    mapper映射xml
    1. <select id=“queryDiscDerateCount” resultType=“Integer”>
    2. select count (*) from t_mchnt_disc_config where mchnt_cd in
    3. <foreach collection=“list” index=“index” item=“mchntCd” open=“(“ close=“)” separator=“,”>
    4. #{mchntCd}
    5. </foreach>
    6. </select>
     
       2、实体类 list<User>  userlist,实体类中有 list 属性
    实体类:
    1. @Data
    2. public class MchntDiscDerateDto {
    3. private String mchntCd = “”;
    4. }
    mapper接口
    
    List<TMchntDerateInfoDto> getDiscDerateList
    (List<MchntDiscDerateDto> discDto);
      mapper映射xml:
    1. <select id=“getDiscDerateList” parameterType=“MchntDiscDerateDto” resultType=“TMchntDerateInfoDto”>
    2. select
    3. t_mchnt_disc_derate_config
    4. where
    5. mchnt_cd in
    6. <foreach collection=“list” index=“index” item=“user” open=“(“ close=“)” separator=“,”>
    7. #{user.mchntCd}
    8. </foreach>
    9. </select>
     
    3、数组  String[] params      用 array
    mapper 接口  
    int queryDiscDerateCount
    (String[] mchntCds);
      mapper映射xml:
    1. <select id=“queryDiscDerateCount” resultType=“Integer”>
    2. select count (*) from t_mchnt_disc_derate_config where mchnt_cd in
    3. <foreach collection=“array” index=“index” item=“mchntCd” open=“(“ close=“)” separator=“,”>
    4. #{mchntCd}
    5. </foreach>
    6. </select>
     
    4、传入的参数是实体类,并且实体中包含数组和集合
    实体类:
    1. @Data
    2. public class UserVo {
    3. private Long id;
    4. private Long supplierId;
    5. private Long[] ids;
    6. private List<Long> clientIdList;
    7. }
    mapper接口
    List<UserVo> queryList
    (UserVo select);
    mapper映射文件xml
    1. <select id=“queryList” resultType=“UserVo” parameterType=“UserVo”>
    2. select *
    3. from bms_bills_memo
    4. <where>
    5. and id in
    6. <foreach collection=“ids” open=“(“ close=“)” item=“id” separator=“,”>
    7. #{id}
    8. </foreach>
    9. and
    10. client_id in
    11. <foreach collection=“clientIdList” separator=“,” item=“detail” open=“(“ close=“)” >
    12. #{detail}
    13. </foreach>
    14. </where>
    15. </select>
     
    5、传入多个list或者array,不使用实体进行封装。用注解@Params, collection使用到Param中定义的别名
    mapper接口
    List<UserVo> queryList
    (@Param("idArray") Long[] array, @Param("clientIdList") List<Long> list);
    mapper映射文件xml
    1. <select id=“queryList” resultType=“UserVo”>
    2. select *
    3. from t_user_inf
    4. <where>
    5. and id in
    6. <foreach collection=“idArray” open=“(“ close=“)” item=“id” separator=“,”>
    7. #{id}
    8. </foreach>
    9. and
    10. client_id in
    11. <foreach collection=“clientIdList” separator=“,” item=“detail” open=“(“ close=“)” >
    12. #{detail}
    13. </foreach>
    14. </where>
    15. </select>

     

    6、map参数
    当我们传入的参数为 Map<String,Objject>的时候,那么能不能正常使用 foreach呢,答案是肯定的,因为对象也是类似于map结构啊
    1. /**
    2. * map 获取数据
    3. * @param map
    4. * @return
    5. */
    6. List<SysUser> getUserByIds (Map<String,Object> map);
    1. // xml
    2. <select id=“getUserByIds” resultMap=“BaseResultMap”>
    3. select
    4. <include refid=“Base_Column_List” />
    5. from t_sys_user
    6. where status = #{status}
    7. and id in
    8. <foreach collection=“ids” item=“id” open=“(“ close=“)” separator=“,”>
    9. #{id}
    10. </foreach>
    11. </select>

    实际调用:

    1. @Test
    2. public void testMapUsers() {
    3. Map<String,Object> params = new HashMap<>();
    4. params.put(“status”, “1”);
    5. params.put(“ids”, Arrays.asList(1,2,3,4,5,6,7,8));
    6. List<SysUser> all = sysUserDao.getUserByIds(params);
    7. try {
    8. System.out.println(new JsonMapper().writeValueAsString(all));
    9. } catch (JsonProcessingException e) {
    10. e.printStackTrace();
    11. }
    12. }

    调用结果:

    三、总结

    1、mapper 接口中添加 @Param注解的场合,list,array将会失效;

    2、使用了 @Param注解 collection的内容需要使用Param中的别名来指定你需要用到的list或者array

  • 413 Request Entity Too Large

    最近我们的网站服务平台上传apk(应用程序)的时候 上传60M的app的时候 报错nginx

    413 Request Entity Too Large

    经过排查修改nginx配置

    这是最简单的一个做法,着报错原因是nginx不允许上传配置过大的文件,那么件把nginx的上传大小配置调高就好。

    1、打开nginx主配置文件nginx.conf, 找到http{}段并修改以下内容:

    http {
        include       mime.types;
        default_type  application/octet-stream;
        server_names_hash_bucket_size 128;
        client_header_buffer_size 32k;
        large_client_header_buffers 4 32k;
        client_max_body_size 100m;
        limit_conn_zone $binary_remote_addr zone=one:32k;
        sendfile        on;
        tcp_nopush     on;
        keepalive_timeout  60;
        tcp_nodelay on;
        gzip  on;
        gzip_min_length  1k;
        gzip_buffers     4 16k;
        gzip_http_version 1.0;
        gzip_comp_level 2;
        gzip_types       text/plain application/x-javascript text/css application/xml;
        gzip_vary on;
        log_format  wwwlogs  '$remote_addr - $remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for';
        #include default.conf;
        include vhost/*.conf;
    }
    
    

    client_max_body_size 100m;

    当中的100修改成你需要的允许文件大小。

    2、修改后,测试nginx配置是否正确

    重启nginx

    我们的项目是以php运行的,这个大小client_max_body_size要和php.ini中的如下值的最大值差不多或者稍大,这样就不会因为提交数据大小不一致出现错误。

    post_max_size = 100M
    
    upload_max_filesize = 100M

    当中的100M修改成你需要的允许文件大小。把当中的100M修改成你第一步设置的大小。

    我们修改完php.ini文件后 重启一下php 然后我们再上传60M的APP时ok 没问题

  • IDEA中JS文件中文乱码

    521f7e8e3ee6fc0e8776946b15e1102f e33dce9c87ad4a54872f1ecdb9d4b35b

    开始我以为是导入的js文件没有设置编码的原因然后我加上charset=UTF-8,但是没有起作用,后我又以为是jsp文件编码的原因,于是我又加上了pageEncoding="utf-8",任然没有起作用。

    几次反思后我觉得可能问题出现在我用的开发工具IDEA上,网上查阅资料后找到问题了。

    一、设置全局和项目编码

    222b878f23f59693e1b35e09ab4e7765 83b8c1c582d3e083ec804ebd1a262967

    二、设置Tomcat启动项目用到的VM options

    f48c268e7f043df8b7c1c6259eafd5af 83c394bbefcc59f91102305b4e4e3654

    修改完后重启项目

  • 将 Docker 命令转化为 Docker Compose 文件

    如果你每天在正式或个人系统中使用 Docker,你应该知道有一个有用的应用叫 Composerize。在这个简短的指南中,我们将了解什么是 Composerize,以及如何使用 Composerize 在 Linux 中将 docker run 命令转换为 Docker Compose 文件格式。

    什么是 Composerize?

    Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。Docker Compose 只是一个 YAML 文件,我们在其中为 Docker 应用定义服务、网络和卷。

    不是每个人都擅长写高效的 Docker Compose 文件。你们中的一些人可能会发现,甚至写一个简单的 Docker Compose 文件都很困难。不用担心! 看下 Composerize,它可以帮助你从  docker run 命令中创建 Docker Compose 文件。

    Composerize 是一个命令行和基于网络的工具,可以将  docker run 命令转换成 Docker Compose 文件。

    无论  docker run 命令是简单、简短还是冗长、复杂,都没有关系。你所要做的就是把命令传给 Conposerize。Composerize 会立即将 docker run 命令变成 Docker Compose 文件!

    在 Linux 中安装 Composerize

    Composerize 是作为一个网络服务提供的。所以你不需要在你的系统上安装它。如果你因为任何原因想在本地安装它,请继续阅读。

    Composerize 可以用 npm 安装。确保你的系统中已经安装了 Nodejs。如果没有安装,请按照下面的链接来安装 Nodejs。

    安装完 Nodejs 后,运行以下命令来安装 Composerize:

    1. $ npm install composerize

    该命令将只为当前用户安装 Composerize。

    如果你想在全局(全系统)安装它,请运行上述命令并加上  -g 选项,如下所示。

    1. $ npm install composerize - g

    用 Composerize 将 Docker 命令转换为 Docker Compose 文件

    要将  docker run 命令转换为 Docker Compose 格式,只需用 Composerize 运行它,如下所示:

    1. $ composerize docker run - d - p 9000 : 9000 - v / var / run / docker . sock : /var/ run / docker . sock portainer / portainer

    它将以 Docker Compose 文件格式生成内容。

    示例输出:

    1. version : '3.3'
    2. services :
    3. portainer :
    4. ports :
    5. - '9000:9000'
    6. volumes :
    7. - '/var/run/docker.sock:/var/run/docker.sock'
    8. image : portainer / portainer

    Convert Docker Run Commands Into Docker-Compose Files With Composerize

    Convert Docker Run Commands Into Docker-Compose Files With Composerize

    现在在你的  docker-compose.yml 文件中复制上面几行。就这么简单!

    正如我所说,你也可以使用 Composerize 网络服务将  docker run 命令转换成 Docker Compose 格式。

    进入 https://www.composerize.com/,将 docker run 命令粘贴到框中,你就会立即得到 docker-compose.yml 文件!

    Turn Docker Run Commands Into Docker-compose Files Using Composerize

    Turn Docker Run Commands Into Docker-compose Files Using Composerize

    将命令转换为 Docker Compose 文件后,到你保存  docker-compose.yml 文件的位置,运行以下命令来启动 Docker 应用:

    1. $ docker - compose up

    Composerize 是对 Docker 用户有用的工具之一。你现在可以安全地告别漫无边际的 Docker 命令了。