如何在Windows中播种Docker容器

Rui

我打算从Docker Hub安装mongodb docker容器,然后将一些数据插入其中。显然,需要一个mongodb种子容器。所以我做了以下事情:

  1. 在中创建了一个DockerfileMongo种子容器,mongo_seed/Dockerfile其中的代码Dockerfile如下:

    FROM mongo:latest
    WORKDIR /tmp
    COPY data/shops.json .
    COPY import.sh .
    CMD ["/bin/bash", "-c", "source import.sh"]
    

    的代码import.sh如下:

    #!/bin/bash
    ls .
    mongoimport --host mongodb --db data --collection shops --file shops.json
    

    shops.json文件包含要导入到Mongo的数据

  2. docker-compose.yml当前工作目录中创建了一个文件,代码如下:

    version: '3.4'
    services:
      mongodb:
        image: mongo:latest
        ports: 
        - "27017:27017"
        container_name: mongodb 
      mongodb_seed:
        build: mongodb_seed
        links:
        - mongodb
    

上面的代码成功地使mongodb服务执行,import.sh以导入json数据- shops.json它在我的Ubuntu中完美运行。但是,当我尝试docker-compose up -d --build mongodb_seed在Windows中运行命令时,数据导入失败,并显示错误日志:

Attaching to linux_mongodb_seed_1
mongodb_seed_1  | ls: cannot access '.'$'\r': No such file or directory
: no such file or directory2T08:33:45.552+0000  Failed: open shops.json
mongodb_seed_1  | 2019-04-02T08:33:45.552+0000  imported 0 documents

任何人都知道为什么会这样吗?以及如何修复它使其也可以在Windows中使用?

丁香

注意错误ls: cannot access '.'$'\r': No such file or directory

Windows上的Docker(或任何基于Linux / macOS的系统)的问题之一是行尾处理方式的差异。

Windows以回车符和换行符结束行,\r\n而Linux和macOS仅使用换行符\n当您尝试在Windows中创建文件并在Linux / macOS系统上运行该文件时,这将成为一个问题,因为这些系统将文件\r视为文本而不是换行符。

dos2unix只要有人在Windows上的任何类型的编辑器上进行任何编辑,请确保在脚本文件上运行即使在Git Bash上创建脚本文件,也不要忘记运行dos2unix

dos2unix import.sh

参见https://willi.am/blog/2016/08/11/docker-for-windows-dealing-with-windows-line-endings/

在您的情况下:

FROM mongo:latest
RUN apt-get update && apt-get install -y dos2unix
WORKDIR /tmp
COPY data/shops.json .
COPY import.sh .
RUN dos2unix /import.sh && apt-get --purge remove -y dos2unix
CMD ["/bin/bash", "-c", "source import.sh"]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章