• 如何设置service中容器的运行环境?环境变量、用户、工作目录?



    0、导语

     

    今天的文章呢,主要为你解决3个问题:

     

    • 1、如何为service中运行的容器设置环境变量?
    • 2、如何指定容器以什么用户执行?
    • 3、容器的工作目录(workdir)?

     

    下面咱们一个一个的来看。

     

    1、如何设置容器的环境变量?

     

    非常的简单,在创建service的时候,通过--env指定变量和变量值就可以了

     

    来看个例子:

    docker service create \
      --with-registry-auth \
      --name envtest \
      --env VAR=value \
      --env VAR2=val2 \
      172.20.58.152/middleware/nginx:1.21.4 

     

    [root@nccztsjb-node-01 ~]# docker service create \
    
    > --with-registry-auth \
    
    > --name envtest \
    
    > --env VAR=value \
    
    > --env VAR2=val2 \
    
    > 172.20.58.152/middleware/nginx:1.21.4
    
    6z66wzipszszt7bpgzt6spm7g
    
    overall progress: 1 out of 1 tasks
    
    1/1: running [==================================================>]
    
    verify: Service converged
    
    [root@nccztsjb-node-01 ~]#

     

    查看下容器中环境变量:

     

    [root@nccztsjb-node-02 ~]# docker ps
    
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    
    17316b6bcc90 172.20.58.152/middleware/nginx:1.21.4 "/docker-entrypoint.…" About a minute ago Up About a minute 80/tcp envtest.1.npvjbqcr8h4x7qn239cbppm2u
    
    [root@nccztsjb-node-02 ~]# docker exec -it 17316b6bcc90 env
    
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    
    HOSTNAME=17316b6bcc90
    
    TERM=xterm
    
    VAR=value
    
    VAR2=val2
    
    NGINX_VERSION=1.21.4
    
    NJS_VERSION=0.7.0
    
    PKG_RELEASE=1~bullseye
    
    HOME=/root
    
    [root@nccztsjb-node-02 ~]#

     

    可以看到环境变量已经正确的设置了,这个例子里面设置了2个环境变量。

     

    2、如何指定容器以哪个用户执行?

     

    通过在创建service的时候,指定--user参数,指定要运行的用户名

     

    比如,下面的例子

     

    查看当前容器用哪个用户在运行

     

    可以看到,目前在用root在运行

    [root@nccztsjb-node-02 ~]# docker ps
    CONTAINER ID   IMAGE                                   COMMAND                CREATED          STATUS          PORTS     NAMES
    38b124aa0ff8   172.20.58.152/baseimage/alpine:latest   "ping www.baidu.com"   20 seconds ago   Up 19 seconds             envtest.1.3liiaumkie4i6pfpwlf8ukmp2
    [root@nccztsjb-node-02 ~]# docker exec -it 38b124aa0ff8 env
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    HOSTNAME=38b124aa0ff8
    TERM=xterm
    HOME=/root
    [root@nccztsjb-node-02 ~]# docker exec -it 38b124aa0ff8 cat /etc/passwd
    root:x:0:0:root:/root:/bin/ash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/mail:/sbin/nologin
    news:x:9:13:news:/usr/lib/news:/sbin/nologin
    uucp:x:10:14:uucp:/var/spool/uucppublic:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    man:x:13:15:man:/usr/man:/sbin/nologin
    postmaster:x:14:12:postmaster:/var/mail:/sbin/nologin
    cron:x:16:16:cron:/var/spool/cron:/sbin/nologin
    ftp:x:21:21::/var/lib/ftp:/sbin/nologin
    sshd:x:22:22:sshd:/dev/null:/sbin/nologin
    at:x:25:25:at:/var/spool/cron/atjobs:/sbin/nologin
    squid:x:31:31:Squid:/var/cache/squid:/sbin/nologin
    xfs:x:33:33:X Font Server:/etc/X11/fs:/sbin/nologin
    games:x:35:35:games:/usr/games:/sbin/nologin
    cyrus:x:85:12::/usr/cyrus:/sbin/nologin
    vpopmail:x:89:89::/var/vpopmail:/sbin/nologin
    ntp:x:123:123:NTP:/var/empty:/sbin/nologin
    smmsp:x:209:209:smmsp:/var/spool/mqueue:/sbin/nologin
    guest:x:405:100:guest:/dev/null:/sbin/nologin
    nobody:x:65534:65534:nobody:/:/sbin/nologin
    [root@nccztsjb-node-02 ~]# docker exec -it 38b124aa0ff8 whoami
    root
     

     

    将这个容器修改为用ftp用户在运行,可以像下面这么做

     

    docker service create \
      --with-registry-auth \
      --name envtest \
      --user ftp \
      172.20.58.152/baseimage/alpine:latest \
      ping www.baidu.com  

     

    通过--user创建一个以ftp用户运行的容器,运行之后,看下现在到底是用哪个用户运行的

     

    [root@nccztsjb-node-02 ~]# docker ps
    CONTAINER ID   IMAGE                                   COMMAND                CREATED          STATUS          PORTS     NAMES
    83a8ff6ac55e   172.20.58.152/baseimage/alpine:latest   "ping www.baidu.com"   13 seconds ago   Up 12 seconds             envtest.1.je536vpsce84yzwo63nr3jwrl
    [root@nccztsjb-node-02 ~]# docker exec -it 83a8ff6ac55e  whoami
    ftp

     

    看到了吧,现在容器是以ftp用户在运行的。

     

    不过,这里边有一个非常非常非常关键的点,要十分注意。

     

    就是注意容器的运行命令和用户权限的匹配

     

    比如说:nginx服务默认用root启动,修改为nginx之后,会因为权限而无法启动,所以,要关注启动的entrypoint和CMD,否则,容器会出现启动失败的情况

     

    接下来再看一个

     

    3、如何指定容器的工作目录

     

    就是刚一登录到容器,用户所在的目录

     

    使用:--workdir参数来指定

     

    来看个例子:

    [root@nccztsjb-node-02 ~]# docker ps
    CONTAINER ID   IMAGE                                   COMMAND                CREATED         STATUS         PORTS     NAMES
    53c81ccff8b0   172.20.58.152/baseimage/alpine:latest   "ping www.baidu.com"   8 seconds ago   Up 6 seconds             envtest.1.iy3oiyw63n98tpojqjvq2v8kx
    [root@nccztsjb-node-02 ~]# docker exec -it 53c81ccff8b0 pwd
    /

     

    这个容器的workdir在 / 根目录

     

    现在要将它修改为/tmp目录,看下面

    docker service create \
      --with-registry-auth \
      --name envtest \
      --user ftp \
      --workdir /tmp \
      172.20.58.152/baseimage/alpine:latest \
      ping www.baidu.com  

     

    部署之后,再看下,是否真的调整过来了

     

    [root@nccztsjb-node-02 ~]# docker ps
    CONTAINER ID   IMAGE                                   COMMAND                CREATED          STATUS          PORTS     NAMES
    03568f098c2b   172.20.58.152/baseimage/alpine:latest   "ping www.baidu.com"   31 seconds ago   Up 30 seconds             envtest.1.6wckr13u09wquwec0zxf20elk
    [root@nccztsjb-node-02 ~]# 
    [root@nccztsjb-node-02 ~]# docker exec -it 03568f098c2b pwd
    /tmp
    [root@nccztsjb-node-02 ~]# 

     

    完美,已经成功修改了workdir为/tmp

     

    来总结下······

     

    4、总结

     

    • 设置环境变量 --env
    • 设置运行用户 --user
    • 设置工作目录 --workdir

     

    OK,就这3点,在具体的实际场景中,根据不同的需要进行设置就可以了

     

    本次文章的内容就到这里······

  • 相关阅读:
    鼠标滑动带动画下拉展开的滑动门代码
    很靓很大气的简约红色CSS菜单代码
    用Cookie来保存菜单当前位置代码
    单击单选按钮切换对应的菜单代码
    仿微软中国的滑动门导航菜单代码
    C#创建SQLServer的存储过程
    通过应用程序域AppDomain加载和卸载程序集(转载)
    多线程学习笔记一(转载)
    C#实现Treeview节点"正在载入..."效果
    JavaScript 学习笔记之函数理解二
  • 原文地址:https://www.cnblogs.com/chuanzhang053/p/16707023.html
Copyright © 2020-2023  润新知