Dockerfile将文件复制到正确的容器中
我有两个码头集装箱。一个运行tomcat,另一个运行mysql。我想将Dockerfile将文件复制到正确的容器中,docker,docker-compose,dockerfile,Docker,Docker Compose,Dockerfile,我有两个码头集装箱。一个运行tomcat,另一个运行mysql。我想将.sql文件复制到mysql容器已经存在的“docker entrypoint initdb.d”文件夹中 我在Dockerfile中使用了以下命令: COPY test.sql /docker-entrypoint-initdb.d 两个容器启动后,我看到在我的tomcat容器中创建了文件夹“docker entrypoint initdb.d”,并将test.sql复制到其中。 文件没有复制到我需要的地方test.sql
.sql
文件复制到mysql容器已经存在的“docker entrypoint initdb.d”文件夹中
我在Dockerfile中使用了以下命令:
COPY test.sql /docker-entrypoint-initdb.d
两个容器启动后,我看到在我的tomcat容器中创建了文件夹“docker entrypoint initdb.d”,并将test.sql
复制到其中。
文件没有复制到我需要的地方test.sql
未复制到mysql容器中
我能做什么
docker-compose.xml:
version: "2"
services:
db:
image: mysql
environment:
- MYSQL_ALLOW_EMPTY_PASSWORD="true"
myapp:
build: ./myapp
ports:
- 8080:8080
- 3306:3306
您正在构建
tomcat
容器,但是在那里使用了Mysql
图像,这就是文件复制到tomcat
容器的原因
当容器打开时,您可以docker cp
手动将文件移动到所需位置
如果您想让数据库在启动时可用于容器,我建议您使用一个挂载了本地文件系统的虚拟容器。然后在该容器中手动恢复数据库。然后移除容器并修改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
FROM mysql
COPY test.sql /docker-entrypoint-initdb.d
另一种方法是使用以下dockerfile
创建自己的图像:
FROM mysql
COPY test.sql /docker-entrypoint-initdb.d
您正在构建
tomcat
容器,但是在那里使用了Mysql
图像,这就是文件复制到tomcat
容器的原因
当容器打开时,您可以docker cp
手动将文件移动到所需位置
如果您想让数据库在启动时可用于容器,我建议您使用一个挂载了本地文件系统的虚拟容器。然后在该容器中手动恢复数据库。然后移除容器并修改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
FROM mysql
COPY test.sql /docker-entrypoint-initdb.d
另一种方法是使用以下dockerfile
创建自己的图像:
FROM mysql
COPY test.sql /docker-entrypoint-initdb.d
使用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
FROM mysql
COPY test.sql /docker-entrypoint-initdb.d
使用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
FROM mysql
COPY test.sql /docker-entrypoint-initdb.d
tomcat容器是通过docker文件构建的,其中as mysql容器(db)是通过docker映像名“mysql”构建的 您可以将具有当前文件夹(主机)的卷装载到容器内的“/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
tomcat容器是通过docker文件构建的,其中as mysql容器(db)是通过docker映像名“mysql”构建的 您可以将具有当前文件夹(主机)的卷装载到容器内的“/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
你的集装箱有单独的docker文件,对吗?不,我在一个集装箱里做。我使用docker compose结构。你能发布你的docker compose yaml文件吗?将其添加到我的问题中。你的容器有单独的docker文件,对吗?不,我在一个容器中完成。我使用docker compose结构。你能发布你的docker compose yaml文件吗?将其添加到我的问题中。我知道docker cp,但我想我需要在启动前复制该文件。(我不想在每次启动时都复制它)那么我能具体做些什么来解决我的问题呢?我知道docker cp,但我想我需要在启动前复制文件。(我不想在每次创业时都复制它)那么我能具体做些什么来解决我的问题呢?