针对“Docker之修改/etc/default/docker 里的DOCKER_OPTS参数不生效问题”,我给出以下攻略:
1. 问题描述
在修改/etc/default/docker
中的DOCKER_OPTS
参数后,重启docker服务,发现修改并没有生效,依旧启用默认参数。
2. 原因分析
这个问题的原因是因为Docker的服务启动时,是根据/lib/systemd/system/docker.service
文件中的配置信息启动的,而不是/etc/default/docker
中的配置信息。因此,修改/etc/default/docker
中的DOCKER_OPTS
参数并不能生效。
3. 解决方法
方法一:修改docker.service文件
通过修改/lib/systemd/system/docker.service
文件中的参数来解决这个问题。具体步骤如下:
-
使用命令查找
docker.service
文件:find / -name docker.service
-
打开
docker.service
文件,输入以下命令:
bash
sudo vi /lib/systemd/system/docker.service
-
找到
[Service]
段落,修改ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
为ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock $DOCKER_OPTS
-
保存并退出文件。
-
若修改
/lib/systemd/system/docker.service
文件后重启Docker服务仍然不生效,可以使用以下命令使修改生效并重启Docker服务:
bash
sudo systemctl daemon-reload
sudo systemctl restart docker.service
方法二:使用systemd的Override功能
使用systemd的override功能也可以解决这个问题。具体步骤如下:
- 创建override文件夹:
bash
sudo mkdir /etc/systemd/system/docker.service.d
- 在override文件夹中创建新的配置文件,例如
docker-override.conf
:
bash
sudo vi /etc/systemd/system/docker.service.d/docker-override.conf
- 在
docker-override.conf
文件中添加下面的代码:
bash
[Service]
EnvironmentFile=-/etc/default/docker
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock $DOCKER_OPTS
-
保存并关闭文件。
-
使用以下命令重载systemd,使修改生效,并重启Docker服务:
bash
sudo systemctl daemon-reload
sudo systemctl restart docker.service
4. 示例说明
示例一:修改docker内存限制
在/etc/default/docker
中修改DOCKER_OPTS
参数,例如:
DOCKER_OPTS="--default-ulimit memlock=-1:-1 --default-ulimit nproc=10240"
此时,若使用方法一修改docker.service文件,应该是在该文件中添加如下语句:
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --default-ulimit memlock=-1:-1 --default-ulimit nproc=10240
若使用方法二,应该在/etc/default/docker
中添加如下语句:
default-ulimit memlock=-1:-1
default-ulimit nproc=10240
然后,在override文件夹中创建新的配置文件,例如docker-override.conf
,添加如下语句:
[Service]
EnvironmentFile=-/etc/default/docker
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock $DOCKER_OPTS
再使用以下命令重载systemd并重启Docker服务:
sudo systemctl daemon-reload
sudo systemctl restart docker.service
示例二:添加docker代理
在/etc/default/docker
中添加代理信息,例如:
export DOCKER_HTTP_PROXY="http://127.0.0.1:8888"
export DOCKER_HTTPS_PROXY="http://127.0.0.1:8888"
此时,若使用方法一修改docker.service文件,应该是在该文件中添加如下语句:
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock \
-g /var/lib/docker \
--iptables=false \
--ip-masq=false \
--dns 8.8.8.8 \
--dns 8.8.4.4 \
--log-driver=journald \
--signature-verification=false \
--default-ulimit memlock=-1:-1 \
--default-ulimit nproc=10240 \
--registry-mirror=https://xxxxx.mirror.aliyuncs.com \
--label provider=aliyun \
$DOCKER_OPTS \
$DOCKER_STORAGE_OPTIONS \
$DOCKER_NETWORK_OPTIONS \
$ADD_REGISTRY
若使用方法二,应该在/etc/default/docker
中添加如下语句:
DOCKER_HTTP_PROXY="http://127.0.0.1:8888"
DOCKER_HTTPS_PROXY="http://127.0.0.1:8888"
然后,在override文件夹中创建新的配置文件,例如docker-override.conf
,添加如下语句:
[Service]
EnvironmentFile=-/etc/default/docker
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock $DOCKER_OPTS
再使用以下命令重载systemd并重启Docker服务:
sudo systemctl daemon-reload
sudo systemctl restart docker.service
以上就是针对“Docker之修改/etc/default/docker 里的DOCKER_OPTS参数不生效问题”的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Docker之修改/etc/default/docker 里的DOCKER_OPTS参数不生效问题 - Python技术站