



























yaml
--- backend
-- model
-- controller如果执行
bash
WORKDIR /app
COPY backend .容器内app底下会是model和controller目录,并不是backend目录。 如果要拷贝整个目录,应该: COPY backend ./backend
如果修改了 Dockerfile,记得要重新执行build,即生成新的镜像。这样启动后才能看到效果。
打包node项目中的node_modules问题。 某node项目结构:
src
node_modules
package.json
package-lock.jsondockerfile部分代码
FROM node:8.12-alpine
RUN mkdir -p /app
WORKDIR /app
COPY package.json .
COPY package-lock.json .
RUN npm install
...我们在容器内生成了项目所依赖的node_modules文件。这是docker的build阶段。 之后在run启动阶段时,在mouted共享目录时要特别小心,如果挂载整个项目,容器内的node_modules会被项目中的覆盖。 最好把需要挂载的文件单独放到一个目录中。
yaml
mysql:
build: ./docker-build/mysql
ports:
- "33060:3306"
volumes:
- ./docker-build/mysql/data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: ${DOCKER_MYSQL_PASSPORD-123456}.env文件 DOCKER_MYSQL_PASSPORD=mypassord 比如下面的${DOCKER_MYSQL_PASSPORD-123456}表示优先去.env文件找定义的key值,如果没有则使用默认值,即123456。 docker-compose.yml 受版本控制,.env不受。更多细节参考
php aritsan是不行的,需要进到容器里执行,或者在宿主机执行docker-compose exec <mycontainer> php artisan或者是docker exec -it <mycontainer> php artisan
如果php项目用的nginx的php-fpm容器,想重启php-fpm,容器内使用kill -USR2 1,容器外执行docker exec -it <mycontainer> kill -USR2 1\
docker-compose down要慎用,他会销毁所有容器和网络等。如果你之前在容器里修改过文件,都会没有。当然docker也不推荐直接在容器动手脚,建议写个shell脚本,启动之后在容器内执行。
还是 mysql 数据库问题,如果容器启动了 mysql,之后通过配置修改了密码,可能会造成重新连接后死活显示"Access denied"。 这是因为如果建立了共享卷volume,里面存的还是老的user信息,需要docker-compose rm -v 清除卷然后重连。
删除日志 find /var/lib/docker/containers/ -type f -name "*.log" -delete
删除所有停止的容器 docker rm $(docker ps -a -q)
Docker 提供了方便的 docker system prune 命令来删除那些已停止的容器、dangling 镜像、未被容器引用的 network 和构建过程中的 cache. 安全起见,这个命令默认不会删除那些未被任何容器引用的数据卷,如果需要同时删除这些数据卷,你需要显式的指定 --volumns 参数。比如你可能想要执行下面的命令: docker system prune --all --force --volumns
注意,使用 --all 参数后会删除所有未被引用的镜像而不仅仅是 dangling 镜像。
何为 dangling images,其实可以简单的理解为未被任何镜像引用的镜像。比如在你重新构建了镜像后,那些之前构建的且不再被引用的镜像层就变成了 dangling images
我们还可在不同在子命令下执行 prune,这样删除的就是某类资源:
bash
docker container prune # 删除所有退出状态的容器
docker volume prune # 删除未被使用的数据卷
docker image prune # 删除 dangling 或所有未被使用的镜像此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。