我正在尝试使用MySQL数据库创建一个容器,并为这些数据库添加一个模式.
我目前的Dockerfile是:
FROM mysql
MAINTAINER (me) <email>
# Copy the database schema to the /data directory
COPY files/epcis_schema.sql /data/epcis_schema.sql
# Change the working directory
WORKDIR data
CMD mysql -u $MYSQL_USER -p $MYSQL_PASSWORD $MYSQL_DATABASE < epcis_schema.sql
Run Code Online (Sandbox Code Playgroud)
为了创建容器,我遵循Docker上提供的文档并执行此命令:
docker run --name ${CONTAINER_NAME} -e MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD} -e MYSQL_USER=${DB_USER} -e MYSQL_PASSWORD=${DB_USER_PASSWORD} -e MYSQL_DATABASE=${DB_NAME} -d mvpgomes/epcisdb
Run Code Online (Sandbox Code Playgroud)
但是当我执行此命令时,不会创建Container,并且在Container状态下可以看到CMD未成功执行,实际上只mysql执行了命令.
无论如何,有没有办法用模式初始化数据库,还是我需要手动执行这些操作?
我试图将在 Apache Tomcat 容器中运行的 Web 服务器连接到运行另一个容器的 MySQL 数据库。为了做到这一点,我使用了 Docker 的链接机制。
docker run -it --name ${CONTAINER_NAME} --link db:db -p 8080:8080 -d tomcat
Run Code Online (Sandbox Code Playgroud)
运行容器后,我可以看到容器已链接并且环境变量已正确公开。
为了将在 Tomcat 容器中运行的 Web 应用程序连接到数据库,我使用了以下配置文件:
<Context>
<Resource
name="jdbc/MYDB"
type="javax.sql.DataSource"
auth="Container"
username="user"
password="password"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://${DB_PORT_3306_TCP_ADDR}:${DB_PORT_3306_TCP_PORT}/epcis?autoReconnect=true">
</Resource>
</Context>
Run Code Online (Sandbox Code Playgroud)
现在的问题是我无法建立到数据库的连接,因为在Tomcat环境中无法识别Docker暴露的环境变量。
有没有办法让 Docker 暴露的这些环境变量对 Apache Tomcat 环境可见?