docker更改映射端口(实践篇)

一、系统环境

操作系统:centos7.7

docker环境:20.10.8

二、docker中使用systemctl

测试环境需要搭建一个php的网页,果断选择了docker部署,需要在docker中部署httpd服务,因为docker中默认不允许运行systemctl服务,所以会出现以下错误

Failed to get D-Bus connection: Operation not permitted;

首先,systemctl是需要docker容器运行时,拥有系统真正的root权限。即在docker run命令式要加上 --privileged=true

网上说,大约在0.6版,privileged被引入docker。使用该参数,container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限。privileged启动的容器,可以看到很多host上的设备,并且可以执行mount。甚至允许你在docker容器中启动docker容器。systemctl就需要如此的权限,不然在容器中运行systemctl命令时,会报无权限的错误:


其次,如果想在容器启动时,启动systemctl,那么有两种方法。

1.在dockerfile中加入:

此处命令的意思是,在容器启动时,运行/usr/sbin/init目录下的脚本,主要是启动dbus-daemon。

CMD ["/usr/sbin/init"]

2.在启动容器的时候,运行/usr/sbin/init,即在docker run 命令最后,加上/usr/sbin/init。

docker run  --net host --privileged=true -itd --name aladdin-holdings -p 8991:80 -p 8993:443 centos:centos7 /usr/sbin/init

 三、修改docker映射端口

下面是运行中的docker环境,因为实际环境,我们需要修改docker映射端口,将docker的80 端口映射到本机的80 端口,docker的443端口映射到本机的443端口。

 下面简单写下本人实践成功的一种方法。

1、停止docker容器

docker stop 1f2f202dab24

2、停止docker服务

systemctl stop docker

3、进入到docker容器文件目录

        id是容器id开头的那一长串。

 4、备份原有文件,出现问题后可以还原回去。

cp hostconfig.json hostconfig-bak.json

cp config.v2.json config-bak.v2.json

 5、修改hostconfig.json。

vim  hostconfig.json

 修改成想要的端口。

 6、修改config.v2.json

vim config.v2.json

#在下面合适的位置,填写端口信息。

"Ports":{"443/tcp":[{"HostIp":"0.0.0.0","HostPort":"443"}],"80/tcp":[{"HostIp":"0.0.0.0","HostPort":"80"}]}

 7、启动docker服务

systemctl start docker

8、启动docker容器

 docker start 1f2f202dab24

9、进行查看。 

 需要注意的是,docker修改完映射端口后,docker的ip可能会发生变化。

注: 

以上为本人实际搭建过程中的经验总结,如果有什么问题,可以在评论区留言,大家一起探讨进步!

猜你喜欢

转载自blog.csdn.net/tiny_du/article/details/120275220