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可能会发生变化。

注: 

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

  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值