首页 > 解决方案 > 如何在 docker 容器内从主机中查找卷文件?

问题描述

在一个docker-compose.yml文件中,我定义了以下服务:

  php:
    container_name: php
    build:
      context: ./container/php
      dockerfile: Dockerfile
    networks:
      - saasnet
    volumes:
      - ./services:/var/www/html
      - ./logs/php:/usr/local/etc/php-fpm.d/zz-log.conf
    environment:
      - "DB_PORT=3306"
      - "DB_HOST=database"

这一切都构建得很好,另一个使用相同卷映射的服务(nginx)- ./services:/var/www/html按预期找到了 php,所以它都可以在浏览器中运行。到目前为止,一切都很好。

但是现在我想进入容器,因为我想composer install从容器内的某个目录运行。所以我使用以下方法进入容器:

docker run -it php bash

我发现自己在 的容器中/var/www/html,我希望能够像在./services目录中的主机上一样导航,但ls此时容器内根本没有显示任何文件。

我对它的工作原理有什么遗漏或不了解?

标签: dockerdocker-compose

解决方案


您的问题是您没有在run命令中指定音量 -docker run不知道您的docker-compose.yml. 如果您想在其中指定所有选项来运行它,您需要使用docker-compose run,或将所有选项传递给docker run

docker-compose run php bash
docker run -it -e B_PORT=3306 -e DB_HOST=database -v ./services:/var/www/html -v ./logs/php:/usr/local/etc/php-fpm.d/zz-log.conf php bash

推荐阅读