如何使用docker-compose.yml文件命名卷?

我是新来的Docker,我试图找出如何设置创build的数据卷的名称。 目前,该目录会自动命名为/ var / libs / docker下的一个长散列,这非常友好。

我试图build立一个MODX的开发环境,如下所示: https : //github.com/modxcms/docker-modx

目前我的docker-compose.yml文件如下:

web: image: modx links: - db:mysql ports: - 80:80 db: image: mysql environment: MYSQL_ROOT_PASSWORD: example ports: - 3306:3306 command: mysqld --sql-mode=NO_ENGINE_SUBSTITUTION myadmin: image: phpmyadmin/phpmyadmin links: - db:db ports: - 8080:8080 

这完美的工作,但我不确定如何命名我直接用我的IDE编辑的数据卷。

(作为一个侧面的问题,是否必须在/ var / libs / docker下创build?还是有办法将它设置到我的home文件夹中的目录?)

更新:感谢从@ juliano的帮助我已经更新了我的docker-compose.yml文件:

 version: '2' services: web: image: modx volumes: - html:/home/muzzstick/dev/modxdev links: - db:mysql ports: - 80:80 db: image: mysql environment: MYSQL_ROOT_PASSWORD: example ports: - 3306:3306 command: mysqld --sql-mode=NO_ENGINE_SUBSTITUTION myadmin: image: phpmyadmin/phpmyadmin links: - db:db ports: - 8080:8080 volumes: html: external: false 

不幸的是,这似乎阻止了Web容器的运行。 db和myadmin容器显示他们运行正常。 没有任何错误…如果我inputdocker start docker_web_1它似乎开始,但docker ps -a docker start docker_web_1显示它一开始就退出。

更新2

运行docker-compose up -d似乎运行没有问题。 但是,正如你可以看到下面,Web容器一旦创build就退出。

  CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a1dd6d8ac94e modx "/entrypoint.sh apach" 10 seconds ago Exited (1) 5 seconds ago docker_web_1 ee812ae858dc phpmyadmin/phpmyadmin "/run.sh phpmyadmin" 10 seconds ago Up 5 seconds 80/tcp, 0.0.0.0:8080->8080/tcp docker_myadmin_1 db496134e0cf mysql "docker-entrypoint.sh" 11 seconds ago Up 10 seconds 0.0.0.0:3306->3306/tcp docker_db_1 

更新3确定此容器的错误日志显示:

 error: missing MODX_DB_HOST and MYSQL_PORT_3306_TCP environment variables Did you forget to --link some_mysql_container:mysql or set an external db with -e MODX_DB_HOST=hostname:port? 

此错误似乎来自https://github.com/modxcms/docker-modx/blob/master/apache/docker-entrypoint.sh#L15-L20

是否可以像docker-compose version 2中的链接处理方式不同?

要使用撰写文件的版本2创build指定的数据卷,您将有一个分隔区域:

 version: '2' services: db: image: postgres volumes: - amazingvolume:/var/lib/postgresql/data volumes: amazingvolume: external: true 

所以你可以定义卷的名称(惊人的体积),如果它是外部的或不在你的服务(在这个例子中的数据库),你可以定义你要挂载哪个目录。

只需在托pipe文档中search托pipe装载的卷:

 version: '2' services: web: image: modx environment: - MYSQL_PORT_3306_TCP=3306 - MODX_DB_HOST=mysql:3306 volumes: - /home/muzzstick/dev/modxdev/html:/var/www/html links: - db:mysql ports: - 80:80 db: image: mysql environment: MYSQL_ROOT_PASSWORD: example ports: - 3306:3306 command: mysqld --sql-mode=NO_ENGINE_SUBSTITUTION myadmin: image: phpmyadmin/phpmyadmin links: - db:db ports: - 8080:8080 

/var/www/html更改为html文件将在容器内的目录。 还要在主机左侧创build目录,并为所有用户提供读取权限。

问候