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点,在具体的实际场景中,根据不同的需要进行设置就可以了
本次文章的内容就到这里······