【发布时间】:2019-04-02 08:38:42
【问题描述】:
我打算从Docker Hub 安装一个 mongodb docker 容器,然后在其中插入一些数据。显然,需要一个 mongodb 种子容器。所以我做了以下事情:
-
在
mongo_seed/Dockerfile中创建了一个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.jsonshops.json文件包含要导入 Mongo 的数据 -
在当前工作目录创建了一个
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 中运行?
【问题讨论】:
-
您是否在 Windows 上运行 Linux 容器?
-
是否有可能摆脱 install.sh 并把所有的 CMD?您还可以在 docker-compose 中覆盖 CMD(命令:...)
-
我想是的,但我不知道 Mongo 种子的
Dockerfile中的WORKDIR和COPY命令是如何工作的。我从链接Docker Hub下载了mongo docker镜像,并检查了这个mongo docker镜像确实是Linux -
问题可能是 import.sh 现在有 Windows 样式的行尾。
标签: mongodb docker docker-compose dockerfile docker-for-windows