如何在Windows中播种docker容器

问题描述 投票:1回答:2

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

  1. Dockerfile创建了一个mongo_seed/Dockerfile的Mongo种子容器,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中运行得很好。但是,当我尝试在Windows中运行命令docker-compose up -d --build mongodb_seed时,导入的数据失败并显示错误日志:

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中工作?

mongodb docker docker-compose dockerfile docker-windows
2个回答
0
投票

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

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

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

每当有人在Windows上编辑任何类型的编辑器时,确保在脚本文件上运行dos2unix。即使在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"]

1
投票

您可以尝试在脚本文件中将行结尾更改为UNIX。

© www.soinside.com 2019 - 2024. All rights reserved.