docker 启动 oracle容器报1521: bind: address already in use错误的解决

复制代码
docker start oracle19c
Error: unable to start container "113bf6abbd5961b60fcc7cee23eae34e7e29631a0e0dd3b721487b559e3dc423": cannot listen on the TCP port: listen tcp4 :1521: bind: address already in use

参考文章解决docker服务端口占用问题,bind:Address already in use介绍的步骤。

用docker ps查看运行中的进程,发现有一个oracle12c的容器正在运行中,将其停止,再启动oracle19c容器就不报错了。

复制代码
docker ps
CONTAINER ID  IMAGE                                                                       COMMAND     CREATED     STATUS            PORTS                                                                                                   NAMES
03796669a3be  registry.cn-hangzhou.aliyuncs.com/lhrbest/oracle_12cr2_ee_lhr_12.2.0.1:2.0  init        2 days ago  Up 5 minutes ago  0.0.0.0:5522->22/tcp, 0.0.0.0:1521->1521/tcp, 0.0.0.0:3389->3389/tcp, 0.0.0.0:5500-5501->5500-5501/tcp  oracle12c
docker stop 03796669a3be
03796669a3be
docker start oracle19c
oracle19c
docker exec -it oracle19c /bin/bash
[oracle@113bf6abbd59 ~]$ cd /par
[oracle@113bf6abbd59 par]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Tue Dec 23 14:06:07 2025
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

为什么我没有启动oracle12c的容器,它却在后台运行?这就要追溯到当时运行它的命令行, 有个restart=always选项导致启动Docker,它就自动启动了。

复制代码
docker run -itd --name oracle12c  \
--privileged=true \
--restart=always \

AI对这个选项给出的说明如下

markdown 复制代码
Docker --restart=always 参数

在 Docker 中,--restart=always 参数用于确保容器在退出时总是重新启动。无论容器是因为故障退出还是 Docker 守护进程重启,该参数都能保证容器自动重启。这对于生产环境中的关键应用非常重要,因为它能确保应用的持续运行。

使用示例

启动容器时添加 --restart=always 参数

在启动容器时,可以通过添加 --restart=always 参数来确保容器在退出时自动重启。例如:

docker run -d --restart=always tomcat

此命令将启动一个 Tomcat 容器,并确保它在退出时自动重启。

修改已创建的容器

如果容器在创建时没有添加 --restart=always 参数,可以使用以下命令进行修改:

docker container update --restart=always 容器名字

例如:

docker container update --restart=always my_container

此命令将更新容器的重启策略,使其在退出时自动重启。

配置文件修改

除了使用命令行参数,还可以通过修改容器的配置文件来设置重启策略。首先需要停止容器,然后编辑 /var/lib/docker/containers/容器ID/hostconfig.json 文件,将 RestartPolicy 修改为 always。

"RestartPolicy": {
"Name": "always",
"MaximumRetryCount": 0
}

修改完成后,重新启动容器即可生效。



使用 --restart=always 参数可以确保 Docker 容器在退出时自动重启,无论是因为故障还是 Docker 守护进程重启。这对于需要高可用性的应用非常重要。可以在启动容器时添加该参数,也可以通过命令或修改配置文件来设置。
相关推荐
Cloud云卷云舒11 小时前
云卷云舒:从Oracle/MySQL迁移到HaishanDB:迁移评估工具核心技术拆解
mysql·oracle·ai-native·haishandb·信创数据库替换
段一凡-华北理工大学12 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
oradh14 小时前
Oracle XTTS实现跨版本迁移和升级(Oracle 11g单库升级至19C RAC集群)
数据库·oracle·11g升级19c·xtts跨版本迁移和升级
生活爱好者!14 小时前
我把NAS当作下载机,docker一键部署qb
运维·docker·容器
java_logo15 小时前
Docker Compose 部署 ClickHouse:快速搭建高性能列式数据库
数据库·clickhouse·docker·列式数据库·轩辕镜像·高性能数据库·clickhouse部署教程
MC皮蛋侠客15 小时前
uv 系列(七):CI/CD、Docker 与私有索引——生产级交付
python·ci/cd·docker·uv
Hui Baby16 小时前
K8S使用CRD和控制器简单应用
云原生·容器·kubernetes
会编程的土豆17 小时前
数据库范式
数据库·oracle
用户2333768521818 小时前
Docker 端口"时通时不通"的排查实战
docker
做个文艺程序员18 小时前
Linux第22篇:用Docker容器化你的Java SaaS应用:一次构建,随处运行
java·docker·容器