首页 > 其他分享 >如何设置service中容器的运行环境?环境变量、用户、工作目录?

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

时间:2022-09-19 11:12:10浏览次数:80  
标签:容器 sbin service -- nologin nccztsjb docker root 环境变量


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点,在具体的实际场景中,根据不同的需要进行设置就可以了

 

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

标签:容器,sbin,service,--,nologin,nccztsjb,docker,root,环境变量
From: https://www.cnblogs.com/chuanzhang053/p/16707023.html

相关文章

  • k8s service
    目录k8sserviceService作用为什么要引入ServiceService需要注意的点Service的作用和原理k8sserviceService作用Service的核心作用就是为Pod提供稳定的网络连接。除此......
  • 30. Service组件
    30.Service组件30.1认识Service服务在后台默默地运行,是不可见的。30.2startService与生命周期新建一个Activity在清单文件中设置Activity3默认启动MyService.j......
  • rocketMQ客户端和nameService、broker之间的信息交互
    客户端(包含生产者和消费者)定时任务里updateTopicRouteInfoFromNameServer方法,定时向nameService获取topic(当前客户端所包含的所有消费者者消费的和生产者要发送的)的信......
  • 实例-rust-打开环境变量
    main.rsusestd::process::Command;fnmain(){letoutput=ifcfg!(target_os="windows"){Command::new("cmd").arg("/C")......
  • 动态设置环境变量
    @echooffsetworkDir=%~dp0setPYTHON_HOME=%workDir%\python-3.7.3-embed-amd64setPATH=%PYTHON_HOME%rem配置src目录的父目录setprojectPath=%workDir%\..\..\..\se......
  • docker容器 日志迁移
    起因docker安装网心云(挂载在外置硬盘上),这两天莫名其妙把我nas中的硬盘给跑满了,通过搜索后发现,这是docker容器运行时产生的日志文件,默认保存在系统/var/lib/docker目录......
  • linux系统环境变量
    打印环境变量打印环境变量命令命令说明set显示当前shell的所有变量包括其内建环境变量(与shell外观等相关),用户自定义变量及导出的环境变量env显示与当前......
  • Docker 容器部署jenkins后忘记系统用户密码处理方案
    一、问题描述由于本地尝试使用docker部署jenkins来研究梳理工具的使用步骤,但隔了一段时间之后,重新拉起容器应用镜像,发现忘记了用户密码,无法登录系统。二、解决方案第......
  • 理解 Spring IoC 容器
    控制反转与大家熟知的依赖注入同理,这是通过依赖注入对象的过程.创建Bean后,依赖的对象由控制反转容器通过构造参数工厂方法参数或者属性注入.创建过程相对于普通......
  • JDK 自带的服务发现框架 ServiceLoader 好用吗?
    请点赞关注,你的支持对我意义重大。......