1. 更改端口映射,(例如,启动mysql是忘记配置端口映射)
方法1:
1.先停止容器
docker stop mysqlA
2.再停止docker
systemctl stop docker
3.修改docker配置文件,在这个json文件里,找到 PortBindings 对象,追加新端口参数
vi /var/lib/docker/containers/{container_id}/hostconfig.json
例如,追加一个3307端口映射:
"PortBindings": {
"3306/tcp": [
{
"HostIp": "",
"HostPort": "3306"
}
],
"3306/tcp": [
{
"HostIp": "",
"HostPort": "3307"
}
]
}
4.检查config.v2.json文件里是否也记录了端口映射,也要修改
"Config": {
....
"ExposedPorts": {
"8898/tcp": {}
},
....
},
"NetworkSettings": {
....
"Ports": {
"8898/tcp": [
{
"HostIp": "",
"HostPort": "8082"
},
{
"HostIp": "",
"HostPort": "8083"
}
],
5.启动docker服务
systemctl start docker
6.启动容器
docker start mysqlA
方法2:
本质就是创建新镜像重新启动,但是如果原来的容器已经配置了参数,那么这种方式可以保留参数(因为是用原来带参数的容器构建的镜像)。
1.先停止容器
docker stop mysqlA
2.将容器commit成为一个镜像
docker commit mysqlA mysqlB
3.运行容器
docker run -p 3306:3306 -d mysqlB
2. 容器A 无法访问 在同一个宿主机内的 容器B(例如:端口8082),
- 正常情况下,我们想到的的是localhost。但是不对,容器里localhost并不是指宿主机的localhost,所以,并不能在A容器中通过localhost:8082访问到同一个宿主机的B容器
- docker在运行时就建立了虚拟网卡,并命名为docker0,再宿主机运行 ifconfig,可以发现 docker0的本地ip是172.17.0.1,将localhost改为这个即可访问。
3. redis容器无法被 其他容器访问(例如容器A)
- redis.conf文件里 有一个bind参数,默认是bind 127.0.0.0。bind参数意思是限制只能通过本机客户端访问(不是网上说的限制只能那个ip访问,这里bind的只能是本机ip,其他没用),懂了bind的意义后,我们就好办了。
- 因为现在是redis容器,所以他的本机地址不再是127.0.0.0,所以你启动redis后,通过docker inspect redis,发现报127.0.0.0链接错误。我这里通过 docker ispect redis 发现 redis启动后,给自动分配的ip地址是 172.17.0.5(我这里是这个),所以redis.conf文件里,把bind参数改为bind这个即可。
4. 容器时间和宿主机时间不一致(例如:我的lottery容器)
#将宿主机时间文件拷贝至容器
docker cp /etc/localtime lottery:/etc/
- 执行完如果报错:
Error response from daemon: Error processing tar file(exit status 1): invalid symlink "/etc/localtime" -> "../usr/share/zoneinfo/Asia/Shanghai"
就换成下边方式执行。
docker cp /usr/share/zoneinfo/Asia/Shanghai lottery:/etc/localtime
网友评论