Dockerfile将COPY文件放入正确的容器中

时间:2016-11-23 16:02:52

标签: docker docker-compose dockerfile

我有2个泊坞容器。一个运行tomcat,另一个运行mysql。我想将.sql文件复制到已存在的" docker-entrypoint-initdb.d" mysql容器的文件夹。

我在Dockerfile中使用了以下命令:

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

两个容器启动后,我看到了文件夹" docker-entrypoint-initdb.d"在我的tomcat容器中创建,并将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

3 个答案:

答案 0 :(得分:3)

使用Dockerfile为数据库容器构建自己的映像,如下所示:

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

答案 1 :(得分:2)

您正在构建Mysql容器,但在那里使用tomcat图像,这就是文件复制到docker cp容器的原因。

当容器启动时,您可以手动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,如下所示:

dockerfile

另一种方法是使用以下FROM mysql COPY test.sql /docker-entrypoint-initdb.d

创建自己的图像
{{1}}

答案 2 :(得分:2)

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

您可以将当前文件夹(主机)的卷安装到" /docker-entrypoint-initdb.d"在容器内。

new 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