Dockerfile复制文件到正确的容器中

我有2个docker集装箱。 一个运行tomcat,另一个运行mysql。 我想将一个.sql文件复制到mysql容器的已经存在的“docker-entrypoint-initdb.d”文件夹中。

我在我的Dockerfile中使用了下面的命令:

 COPY test.sql /docker-entrypoint-initdb.d 

两个容器启动后,我看到文件夹“docker-entrypoint-initdb.d”是在我的tomcat容器中创build的test.sql被复制到它。 该文件不会被复制到我需要的地方。 test.sql复制到mysql容器中。

我能做什么?

泊坞窗,compose.xml:

 version: "2" services: db: image: mysql environment: - MYSQL_ALLOW_EMPTY_PASSWORD="true" myapp: build: ./myapp ports: - 8080:8080 - 3306:3306 

使用像这样的Dockerfile为数据库容器构build自己的映像:

 FROM mysql COPY test.sql /docker-entrypoint-initdb.d 

tomcat容器是通过docker文件构build的,其中mysql容器(db)是通过docker映像名称“mysql”构build的。

您可以将当前文件夹(主机)的卷挂载到容器内的“/docker-entrypoint-initdb.d”。

新的docker-compose.yml将如下所示。

 version: "2" services: db: image: mysql environment: - MYSQL_ALLOW_EMPTY_PASSWORD="true" volumes: - .:/docker-entrypoint-initdb.d myapp: build: ./myapp ports: - 8080:8080 - 3306:3306 

你正在build造tomcat容器,但是在那里使用Mysql映像,这就是为什么把这个文件复制到tomcat容器。

容器启动后,您可以将文件手动装载到所需的位置。

如果你想让数据库在启动时对容器可用,我build议你使用一个虚拟的容器来装载本地文件系统。 然后在该容器中手动恢复数据库。 然后删除容器,并像这样修改dockerfile:

 version: "2" services: db: image: mysql environment: - MYSQL_ALLOW_EMPTY_PASSWORD="true" volumes: - /my/own/datadir:/var/lib/mysql myapp: build: ./myapp ports: - 8080:8080 - 3306:3306 

另一种方法是使用以下dockerfile创build自己的图像:

 FROM mysql COPY test.sql /docker-entrypoint-initdb.d