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

注: 

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

<think>嗯,用户想安装Redis到Docker容器里,并且把默认端口从6379改成63799。我需要提供详细的步骤。首先,我应该先确认用户是否已经安装了Docker,但可能用户已经安装过了,所以可以直接进入运行容器的步骤。 用户提到要修改端口,所以需要知道如何通过Docker命令或者docker-compose来映射端口。记得Redis的默认端口是6379,用户想改成63799,所以应该是将宿主机的63799端口映射到容器的6379端口。对吧?比如使用-p 63799:6379参数。 另外,用户可能需要持久化数据,所以需要挂载卷。不过用户的问题里没有明确说,但最好在教程里包含这个,以防数据丢失。比如使用-v参数指定宿主机目录和容器内的/data目录。 然后,可能还需要调整Redis的配置,比如修改绑定地址或者保护模式,但通常如果只是改端口的话,可能不需要改配置,因为端口映射已经在Docker层面处理了。不过用户可能还是想直接修改Redis的配置文件,这样可以在容器内部使用自定义配置。这时候就需要创建一个自定义的redis.conf文件,然后在运行容器时挂载这个配置文件。 比如在docker run命令里加上-v ./redis.conf:/usr/local/etc/redis/redis.conf,然后用--config参数指定配置文件路径。但Redis的官方镜像好像默认会加载/usr/local/etc/redis/redis.conf,所以可能直接挂载进去就行,不需要额外参数。或者可能需要用redis-server /path/to/redis.conf来启动,这时候要在命令里覆盖默认的启动命令。 对了,用户可能不知道如何创建自定义配置文件,所以需要指导他们如何获取默认的配置文件,然后修改端口部分。或者直接告诉他们修改port 6379为63799,然后保存文件。 另外,可能需要考虑使用docker-compose来简化操作,特别是如果需要更复杂的配置,比如持久化、自定义配置等。docker-compose.yml文件的结构会更清晰,也方便管理。 还要提醒用户关于防火墙和安全设置,比如确保宿主机的63799端口是开放的,以及Redis的安全配置,比如设置密码,避免暴露在公网上。 检查一下有没有遗漏的步骤,比如安装Docker的部分,但用户可能已经安装过了,不过或许应该给出安装Docker的参考,比如引用中的systemctl enable docker的命令,或者安装bundler的例子可能不相关,但引用中的Kubernetes部署Redis集群的信息可能可以作为扩展内容,不过用户的问题只是单节点,所以可能不需要涉及StatefulSet。 总结一下,步骤大概是: 1. 拉取Redis镜像。 2. 运行容器,映射端口63799:6379。 3. 如果需要持久化,添加-v参数挂载卷。 4. 如果需要自定义配置,创建redis.conf,修改端口,然后挂载到容器里。 5. 使用docker-compose的例子来展示更清晰的配置。 然后回答问题中的步骤是否正确,有没有潜在的问题。比如,如果用户直接运行docker run命令,可能会忘记持久化,导致数据丢失。所以最好在教程中建议挂载数据卷。另外,修改端口后,客户端连接时需要使用新的端口63799,这点需要明确告诉用户。 最后生成相关问题,比如如何持久化数据,如何设置密码,或者如何配置集群,但用户的问题只是单节点改端口,所以相关问题可能围绕这些优化和安全方面。</think>以下是安装Redis到Docker容器并修改端口的详细指南: ### 一、基础安装步骤(无自定义配置) 1. **拉取Redis镜像** ```bash docker pull redis:latest ``` 2. **运行容器并修改端口** ```bash docker run -d --name my-redis -p 63799:6379 redis ``` - `-p 63799:6379`表示将宿主机的63799端口映射到容器的6379端口[^2] ### 二、进阶配置(含持久化和自定义配置) 1. **创建配置文件** ```bash mkdir -p ~/redis-config && cd ~/redis-config wget https://raw.githubusercontent.com/redis/redis/7.0/redis.conf -O redis.conf sed -i 's/port 6379/port 6379/g' redis.conf # 保留容器内部端口仍为6379 ``` 2. **启动带持久化的容器** ```bash docker run -d --name my-redis \ -p 63799:6379 \ -v ~/redis-config/redis.conf:/usr/local/etc/redis/redis.conf \ -v redis-data:/data \ redis redis-server /usr/local/etc/redis/redis.conf ``` - 数据持久化通过`-v redis-data:/data`实现 - 配置文件映射保证配置可维护性[^3] ### 三、docker-compose部署方案 创建`docker-compose.yml`文件: ```yaml version: '3' services: redis: image: redis:latest container_name: my-redis ports: - "63799:6379" volumes: - redis-data:/data - ./redis.conf:/usr/local/etc/redis/redis.conf command: redis-server /usr/local/etc/redis/redis.conf volumes: redis-data: ``` 运行命令: ```bash docker-compose up -d ``` ### 四、验证配置 ```bash docker exec -it my-redis redis-cli -p 6379 info server | grep 'tcp_port' ``` 应输出:`tcp_port:6379`,确认容器内部仍使用标准端口[^3]
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值