CMD dockerfile未执行

时间:2016-09-09 12:23:14

标签: mongodb docker

我创建了一个docker镜像,以便为我的dockerized mongo实例播种:

FROM mongo:2.6
MAINTAINER Living Digital Way
COPY ./clients.init.json .
COPY ./users.init.json .

CMD mongoimport --host mongo --db lvdb --collection clients --type json --file ./clients.init.json --jsonArray --upsert --upsertFields client_id
CMD mongoimport --host mongo --db lvdb --collection users --type json --file ./users.init.json --jsonArray --upsert --upsertFields username

我首先开始我的mongo实例:

docker run --name mongo -p 27017:27017 --hostname mongo mongo:2.6

之后,我执行我的形象:

docker run --link mongo:mongo registry.private.com/mongo_seed:demo

这是输出:

# docker run --name mongo-seed --link mongo:mongo registry.private.com/mongo-seed:demo
Unable to find image 'registry.private.com/mongo-seed:demo' locally
v1: Pulling from mongo-seed
046d0f015c61: Already exists
ba95eb02831f: Already exists
53dc8636c4de: Already exists
a1ba40c46d70: Already exists
58b7d37cc7a7: Already exists
6fc4041cef29: Already exists
4cb494f83a39: Already exists
29839a673e80: Pull complete
cc731752cc1a: Pull complete
Digest: sha256:9a88d141b426fb7e96d2418f63c1587f6c055602d77c13ddd4ef744d66d6acc2
Status: Downloaded newer image for registry.private.com/mongo-seed:demo
connected to: mongo
2016-09-09T12:11:42.194+0000 imported 1 objects  <<<<<<<<<<<<<<<<

正如您所看到的,只能执行最后一次CMD

我做错了吗?

1 个答案:

答案 0 :(得分:4)

Dockerfile中只能有一条CMD指令。如果您列出多个CMD,那么只有最后一个CMD才会生效。我建议您将这两个命令放入单独的import.sh,将其复制到您的容器并使用CMD运行。

COPY ./clients.init.json .
COPY ./users.init.json .
COPY ./import.sh .
RUN ["chmod", "+x", "import.sh"] # -> only required, if import.sh is not executable

CMD ["import.sh"]