此消息用于解决我在 php 应用程序中使用 docker 时遇到的问题。事实上,我在本地执行我的 dockers 图像(nginx、phpmyadmin 和 php 与我的应用程序)并且一切正常。但是,我使用安装在我的容器应用程序中的卷和 php,这使我能够修改热文件(无需在每次编辑时构建)。但是,当我将此映像推送到存储库并将其拉到另一个桌面时,包含我的应用程序的卷不存在。你有没有遇到过这种担忧?请找到我的 docker-compose.yml 和 Dockerfile :docker-compose.ymlversion: "3.7"services: app: build: args: user: web uid: 1000 context: ./ dockerfile: Dockerfile image: myblog container_name: myblog-app restart: unless-stopped working_dir: /var/www/ volumes: - ./:/var/www networks: - myblog db: image: mysql:5.7 container_name: myblog-db restart: unless-stopped environment: MYSQL_DATABASE: ${DB_DATABASE} MYSQL_ROOT_PASSWORD: ${DB_PASSWORD} MYSQL_PASSWORD: ${DB_PASSWORD} MYSQL_USER: ${DB_USERNAME} SERVICE_TAGS: dev SERVICE_NAME: mysql volumes: - ./.docker/mysql/database.sql:/docker-entrypoint-initdb.d/init.sql - ./.docker/mysql/data:/var/lib/mysql networks: - myblog phpmyadmin: depends_on: - db image: phpmyadmin/phpmyadmin restart: always ports: - 8002:80 environment: PMA_HOST: db MYSQL_ROOT_PASSWORD: ${DB_PASSWORD} networks: - myblog nginx: image: nginx:alpine container_name: myblog-nginx restart: unless-stopped ports: - 8000:80 volumes: - ./:/var/www - ./.docker/nginx/conf.d:/etc/nginx/conf.d networks: - myblognetworks: myblog: driver: bridge
3 回答
精慕HU
TA贡献1845条经验 获得超8个赞
这是预期的行为,因为卷内的数据不是图像的一部分。卷用于持久化容器中生成的数据,或通过绑定挂载(例如配置、凭据或证书)将动态数据传递到容器中。
https://docs.docker.com/storage/volumes/
你docker-compose.yml
和它的服务使用卷挂载你的本地目录- .:/path/to/dir
只对本地开发有好处,因为你可能会立即看到你的应用程序的变化,而不必重建图像。
如果你想在另一台机器上的图像中看到你的代码,你需要COPY
在你的机器上使用Dockerfile
,重建图像并在每次更改代码时推送!
您还需要docker-compose.yml
通过添加卷来更改您的。
https://docs.docker.com/compose/compose-file/#volumes
www说
TA贡献1775条经验 获得超8个赞
非常感谢您的明确答复。
现在我明白我的配置有什么问题以及我需要做什么。对于搜索解决方案以在同一个 Dockerfile 中管理开发环境和生产环境的人,您可以使用参数 :)
白衣染霜花
TA贡献1796条经验 获得超10个赞
您是否尝试过使用命名卷而不是基于路径的卷?
这将使 Docker 为您管理更多卷,并可能为您提供所需的行为。
https://nickjanetakis.com/blog/docker-tip-28-named-volumes-vs-path-based-volumes
- 3 回答
- 0 关注
- 77 浏览
添加回答
举报
0/150
提交
取消