mysql - 永远不要将容器设置为 'up' [docker]
问题描述
我自己做了一个Dockerfile
和一个docker-compose.yml
,并试图从docker-compose.yml
. apache
容器工作正常:稳定,但容器db
没有。它永远不会成为状态up
。
/work_space
|-eccube #docker-compose.yml
| #Dockerfile
|
|-eccube-data #db
#data
#ececcube-2.4.1
#html
用来docker logs <db container ID>
看看怎么回事↓</p>
Initializing database
2019-05-22T07:59:02.264102Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2019-05-22T07:59:02.266227Z 0 [ERROR] --initialize specified but the data directory has files in it. Aborting.
2019-05-22T07:59:02.267061Z 0 [ERROR] Aborting
Dockerfile
FROM centos:7
RUN yum update -y
RUN yum install -y sudo
RUN yum install -y epel-release
RUN yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
RUN yum clean all
RUN yum -y install wget
RUN yum -y install httpd
RUN yum -y install --enablerepo=remi,remi-php52 php php-devel php-mbstring php-pdo php-gd php-xml php-mcrypt php-pgsql
RUN wget http://downloads.ec-cube.net/src/eccube-2.4.1.tar.gz
RUN tar zxvf eccube-2.4.1.tar.gz
RUN mv -f /eccube-2.4.1/data/ /var/www/data
RUN mv -f /eccube-2.4.1/html/ /var/www/html
RUN rm -rf eccube-2.4.1
RUN rm -rf eccube-2.4.1.tar.gz
CMD ["/usr/sbin/httpd", "-DFOREGROUND"]
EXPOSE 80
码头工人-compose.yml
version: '3'
services:
apache:
build: .
privileged: true
tty: true
ports:
- 80:80
volumes:
- /work_space/eccube-data/html:/var/www/html
- /work_space/eccube-data/data:/var/www/data
db:
image: mysql:5.7
privileged: true
tty: true
ports:
- 6666:3306
volumes:
- /work_space/eccube-data/db:/var/lib/mysql
environment:
- MYSQL_DATABASE:'cube2_dev'
- LANG=C.UTF-8
- MYSQL_ROOT_PASSWORD=root
我将向您展示您需要解决此问题的代码/文件。
/w/eccube ❯❯❯ docker ps ✘ 1
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
251df77751fe eccube_apache "/usr/sbin/httpd -DF…" About an hour ago Up About an hour 0.0.0.0:80->80/tcp eccube_apache_1
/w/eccube ❯❯❯ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b857c8b211ca mysql:5.6 "docker-entrypoint.s…" About an hour ago Exited (1) About an hour ago eccube_db_1
251df77751fe eccube_apache "/usr/sbin/httpd -DF…" About an hour ago Up About an hour 0.0.0.0:80->80/tcp eccube_apache_1
在 var/lib/mysql 中,这些文件和目录存在。
root@f4680fa4d3f4:/var/lib/mysql# ls
auto.cnf ca.pem client-key.pem ib_logfile0 ibdata1 mysql private_key.pem server-cert.pem sys
ca-key.pem client-cert.pem ib_buffer_pool ib_logfile1 ibtmp1 performance_schema public_key.pem server-key.pem
然后,在 /work_space/eccube_data/db 中,确实,那些我们是同步的!!!
/w/e/db ❯❯❯ ls
auto.cnf ca.pem client-key.pem ib_logfile0 ibdata1 mysql private_key.pem server-cert.pem sys
ca-key.pem client-cert.pem ib_buffer_pool ib_logfile1 ibtmp1 performance_schema public_key.pem server-key.pem
解决方案
使用 Docker for Mac,以下内容将数据存储在嵌入式 VM 中,因为该目录没有映射到您的 Mac 环境:
- /work_space/eccube-data/html:/var/www/html
- /work_space/eccube-data/data:/var/www/data
和
- /work_space/eccube-data/db:/var/lib/mysql
相反,您想使用相对路径:
- ../eccube-data/html:/var/www/html
- ../eccube-data/data:/var/www/data
和
- ../eccube-data/db:/var/lib/mysql
这假设您从目录中运行 docker-compose 命令eccube
,并且您的项目在/Users
目录中,这是区分大小写的(请参阅Docker for Mac 入门指南中有关使用其他目录的更多信息)。
推荐阅读
- google-chrome - 如何禁用 Chrome 的多功能栏历史记录
- node.js - 如何在 Puppeteer 的弹出/新选项卡窗口中单击元素
- javascript - 使用函数循环遍历数组并将对象推入Javascript中的空数组
- c# - ImageResizer 内存不足异常
- swift - iOS:Firebase 手机身份验证
- jenkins - 如何将shell变量传递给Jenkins中的依赖/下游作业
- coq - 使用 Coq 中的 `Function` 和 `Program` 简化依赖类型编程的生活
- salesforce - 练习用户是否有销售人员许可证
- python - Python/Pyqt5-将选定的下拉选项存储在变量中
- r - 如何更改 pca2d 中的轴大小?