我已经搜索了我的问题的想法,但我没有发现任何我可以使用的东西。
我有一个带有MySql&的dockerfile。 Apache2和我希望它们在容器启动时启动但我无法在带有CMD
或ENTRYPOINT
的dockerfile中执行它因为我想放一个tail
来保存我的容器我希望能够直接使用run -it container bash
进入bash模式,如果我在脚本中添加尾巴或CMD/ENTRYPOINT
它是不可能的。
我尝试使用update-rc.d
启动我的服务,但它根本不起作用......
我试图启动MySql& Apache2带有ENTRYPOINT
的脚本并将tail
放在CMD
但是我认为在使用不同的dockerfile和脚本进行大量尝试后它是不可能的......
这是我的dockerfile:
###
# Dockerfile db MySql
###
###
# Image
###
FROM debian:jessie
###
# Volume
###
VOLUME /usr/projet/volumes/volume_db
###
# Proxy & installations
###
RUN export http_proxy="myproxy:port" \
&& export https_proxy="myproxy:port" \
&& apt-get update \
&& apt-get install -y vim \
&& echo "mysql-server mysql-server/root_password select root" | debconf-set-selections \
&& echo "mysql-server mysql-server/root_password_again select root" | debconf-set-selections \
&& apt-get install -y mysql-server \
&& apt-get install -y mysql-client \
&& service mysql start \
#&& service mysql stop \
&& echo "phpmyadmin phpmyadmin/dbconfig-install boolean true" | debconf-set-selections \
&& echo "phpmyadmin phpmyadmin/app-password-confirm password root" | debconf-set-selections \
&& echo "phpmyadmin phpmyadmin/mysql/admin-user string root" | debconf-set-selections \
&& echo "phpmyadmin phpmyadmin/mysql/admin-pass password root" | debconf-set-selections \
&& echo "phpmyadmin phpmyadmin/mysql/app-pass password root" | debconf-set-selections \
&& echo "phpmyadmin phpmyadmin/reconfigure-webserver multiselect apache2" | debconf-set-selections \
&& apt-get install -y phpmyadmin\
&& apt-get autoremove --purge
###
# Script startup
###
#COPY script_start /etc/init.d/
RUN update-rc.d apache2 defaults \
&& update-rc.d mysql defaults
###
# Variable env
###
ENV MYSQL_ROOT_PASSWORD=root
###
###
# Port exposition & cmd
###
EXPOSE 3306 80
CMD tail -F -n0 /etc/hosts
还有我的剧本:
#!/bin/bash
### BEGIN INIT INFO
# Provides: script_start
# Required-Start: $local_fs $syslog
# Required-Stop: $local_fs $syslog
# Default-Start: 2
# Default-Stop:
# Short-Description: Boot services mysql apache2
# Description: Boot services
### END INIT INFO
service mysql start \
&& service apache2 start
我希望你明白我想要的东西,而且我没有做太多的语言错误(fr)。
感谢您的帮助:)
答案 0 :(得分:1)
我已经搜索了我的问题的想法,但我没有找到任何我可以使用的。
在几乎所有情况下,您只应在单个容器中运行单个进程。将应用程序分离到多个容器中可以更容易地水平扩展和重用容器。如果该服务依赖于其他服务,请使用容器链接。
答案 1 :(得分:0)
一些可能对您有所帮助的指示 -
RUN
启动服务对您没有好处,因为它将在构建时运行,但在您实际运行容器时不会保留。你应该ENTRYPOINT
,确保脚本在容器启动时运行。docker exec
(在正在运行的容器上执行命令)而不是docker run
(尝试从同一图像启动新容器) )答案 2 :(得分:0)
感谢您的回复,我想到能够直接使用bash模式运行...
所以你说通常我必须使用docker exec
能够修改我的容器,而run
只能用于部署容器吗?
我打算用你的建议来做,谢谢! :d