我正在尝试分发一组在几个链接容器中运行的连接应用程序,其中包含一个mongo数据库,该数据库需要:
理想情况下,数据也将保存在链接的数据卷容器中.
我可以mongo使用mongo不安装任何卷的基本实例将数据导入容器(dockerhub image:psychemedia/mongo_nomount- 这实际上是没有VOLUME /data/db语句的基本mongo Dockerfile )和Dockerfile以下行的配置:
ADD . /files
WORKDIR /files
RUN mkdir -p /data/db && mongod --fork --logpath=/tmp/mongodb.log && sleep 20 && \
mongoimport --db testdb --collection testcoll --type csv --headerline --file ./testdata.csv #&& mongod --shutdown
Run Code Online (Sandbox Code Playgroud)
where ./testdata.csv在与./mongo-with-dataDockerfile 相同的目录()中.
我的docker-compose配置文件包括以下内容:
mongo:
#image: mongo
build: ./mongo-with-data
ports:
- "27017:27017"
#Ideally we should be able to mount this against a host directory
#volumes:
# …Run Code Online (Sandbox Code Playgroud) 我不确定是否有明显的东西逃脱了我或者是否只是不可能但是我正在尝试用来自docker hub的图像组成一个完整的应用程序堆栈.
其中一个是mysql,它支持通过卷添加自定义配置文件,并从已安装的目录运行.sql文件.
但是,我在运行docker-compose的机器上有这些文件,而不是在主机上.在运行entrypoint/cmd之前,是否无法指定本地计算机中的文件复制到容器中?我是否真的必须为这种情况创建一切的本地图像?
使用场景是这样的:
我已经使用docker-machine配置了一个 AWS EC2 实例。
我想使用docker-compose远程启动该 EC2 实例上的一些容器。
撰写文件有一个如下部分:
nginx-proxy:
image: jwilder/nginx-proxy
container_name: nginx-proxy
ports:
- "8888:80"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- /home/ubuntu/nginx.tmpl:/app/nginx.tmpl:ro
Run Code Online (Sandbox Code Playgroud)
如果我docker-compose up -d在本地使用,它会工作,因为“ /home/ubuntu/nginx.tmpl ”文件存在于我的本地计算机上。
但是如果我尝试使用docker-compose来控制 AWS 中的远程守护进程,如下所示:
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://x.y:2376"
export DOCKER_CERT_PATH="somedir"
docker-compose up -d
Run Code Online (Sandbox Code Playgroud)
它会失败,因为远程计算机中不存在“ /home/ubuntu/nginx.tmpl ”文件。
我试过在远程机器同目录下创建这样的文件,可以用,但是感觉不对……
将本地文件挂载到远程 docker 守护进程的更好方法是什么?
是否可以run在容器启动期间使用的操作期间向docker容器提供文件?
基本上我想提供类似于一个txt文件plugins.txt中詹金斯泊坞窗到Tomcat服务器。该文件应包含name:version要在容器启动期间下载的 .war 和 .jar 文件的名称和版本 ( )。我希望这种设置能够更灵活地为客户提供定制的容器,而不是拥有客户特定的图像。但对我来说最大的问题是:
我是 docker 世界的新手。我想将一些软件包安装到 docker 镜像中。所以我采用了 Ubuntu:14.04 docker 镜像并在那里安装了 MySQL 服务器。然后用它做了一些工作。一旦我退出 docker image 并提交它。但是一旦我启动了 docker 容器,创建的数据库就消失了。这是什么原因?