【问题标题】:Docker run script after container start容器启动后 Docker 运行脚本
【发布时间】:2020-12-06 22:07:09
【问题描述】:

我尝试在容器部署后运行脚本。

不幸的是,目前脚本在我运行“docker-compose up”命令后立即启动。

这是一个 Oracle 数据库的映像,需要几分钟才能部署。

现在我进入容器启动脚本来创建数据库。

现在我想通过在部署容器后立即部署数据库来自动执行此操作。

有什么想法吗?

Docker 撰写:

version : "3"
services:
  oracle:
    build:
      context: .
      dockerfile: ./Dockerfile
    ports:
      - "11521:1521"
    environment:
      - ORACLE_PWD=testing12345
    volumes:
    - ./:/var/www/html

Docker 文件:

FROM oracle/database:18.4.0-xe


COPY deployDb.sh /usr/local/bin/deployDb.sh
RUN chmod +x /usr/local/bin/deployDb.sh

CMD ["/bin/bash", "/usr/local/bin/deployDb.sh"]

脚本:

#!/bin/bash

CONNT_ADMIN=system/testing12345@localhost #your env
SQL_FILE_DATA=./testdata_SO-Emballage.sql
SQL_FILE_DB=./crebas_SO-Emballage.sql

sqlplus -s ${CONNT_ADMIN} <<EOF

ALTER SESSION SET "_ORACLE_SCRIPT"=true;
DROP USER so_emballage cascade;
CREATE USER so_emballage IDENTIFIED BY so_emballage;
GRANT connect, resource to so_emballage;

@${SQL_FILE_DB}
@${SQL_FILE_DATA}

EOF

返回:

Creating network "mspr_default" with the default driver
Building oracle
Step 1/4 : FROM oracle/database:18.4.0-xe
 ---> 48fc445cf732
Step 2/4 : COPY deployDb.sh /usr/local/bin/deployDb.sh
 ---> 00698cc72614
Step 3/4 : RUN chmod +x /usr/local/bin/deployDb.sh
 ---> Running in 8d335146f651
Removing intermediate container 8d335146f651
 ---> 7ff62847fca6
Step 4/4 : CMD ["/bin/bash", "/usr/local/bin/deployDb.sh"]
 ---> Running in 6edda8873fa4
Removing intermediate container 6edda8873fa4
 ---> d9222babdb0a

Successfully built d9222babdb0a
Successfully tagged mspr_oracle:latest
Creating mspr_oracle_1 ... done
Attaching to mspr_oracle_1
oracle_1  | ERROR:
oracle_1  | ORA-12541: TNS:no listener
oracle_1  | 
oracle_1  | 
oracle_1  | ERROR:
oracle_1  | ORA-12547: TNS:lost contact
oracle_1  | 
oracle_1  | 
oracle_1  | SP2-0306: Invalid option.
oracle_1  | Usage: CONN[ECT] [{logon|/|proxy} [AS {SYSDBA|SYSOPER|SYSASM|SYSBACKUP|SYSDG|SYSKM|SYSRAC}] [edition=value]]
oracle_1  | where <logon> ::= <username>[/<password>][@<connect_identifier>]
oracle_1  |       <proxy> ::= <proxyuser>[<username>][/<password>][@<connect_identifier>]
oracle_1  | SP2-0157: unable to CONNECT to ORACLE after 3 attempts, exiting SQL*Plus
mspr_oracle_1 exited with code 1

【问题讨论】:

    标签: bash oracle docker


    【解决方案1】:

    我认为最简单的选择是让您的启动脚本保持直到数据库启动并运行

    until sqlplus -L ${CONNT_ADMIN}; do
      echo Waiting for database to start. Trying again in 5 seconds...
      sleep 5
    done
    

    此答案由herehere 组合而成。

    【讨论】:

      猜你喜欢
      • 2018-05-16
      • 2021-12-13
      • 2018-05-20
      • 1970-01-01
      • 1970-01-01
      • 2016-01-05
      • 1970-01-01
      • 1970-01-01
      • 2021-07-16
      相关资源
      最近更新 更多