Docker容器启动后,有时候我们会在容器中安装一些应用,此时就会遇到一个问题,这些应用的端口也需要映射到宿主机,那么该如何做呢?
下面以一个oracle容器为例,展示这个过程。
环境准备
Linux: CentOS 7.3
Docker: 18.06.0-ce
启动一个oracle数据库容器,但不使用-p
指令进行端口映射,使用docker ps
指令显示如下:
此时我们使用navicat是无法连接该数据库的
通过修改容器配置文件方式
$ systemctl stop docker
# 修改前需要停止docker
$ vi /var/lib/docker/containers/容器ID的hash值/hostconfig.json
# 容器ID的hash可通过docker ps获取容器ID,然后tab补全即可
# 在该文件中"PortBindings":{}中插入以下内容即可
"PortBindings":{"1521/tcp":[{"HostIp":"","HostPort":"11522"}]}
# 1521是容器内部暴露的端口,11522是容器映射到宿主机的端口
$ vi /var/lib/docker/containers/容器ID的hash值/config.v2.json
# 如果要映射的端口是原先容器没有对外暴露的,那么还需要修改config.v2.json文件,添加要暴露的端口
"ExposedPorts":{"1521/tcp":{},"8080/tcp":{}},
$ systemctl restart docker
此时执行docker ps
是可以看到容器端口映射信息的。