2016-09-09 48 views
0

我已经以良种我dockerized蒙戈实例创建一个泊坞窗图像:CMD dockerfile

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 

我第一次踢了我蒙戈实例:

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

我做错了什么?

回答

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"] 
+0

现在,它告诉我:'/entrypoint.sh:第21行:/import.sh:权限denied' ... – Jordi

+0

你CHOWN-ED文件到MongoDB的? – Lexandro

+0

我已经更新了答案。另一种方法是在复制之前在import.sh上设置执行标志。 – Matt