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