kal*_*elc 55 mysql ruby-on-rails docker docker-compose
我需要使用docker-compose创建Rails和Mysql容器.当我尝试在容器之间创建链接时docker-compose up,我得到了
无法启动容器9b271c58cf6aecaf017dadaf5b无法链接到非运行容器:/ puma_db_1 AS/puma_web_1/db
档
Dockerfile
FROM ubuntu:14.04
RUN apt-get -y update
RUN apt-get -y install git curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev python-software-properties libffi-dev
RUN apt-get -y install libmysqlclient-dev
RUN git clone https://github.com/sstephenson/rbenv.git /root/.rbenv
RUN git clone https://github.com/sstephenson/ruby-build.git /root/.rbenv/plugins/ruby-build
RUN echo 'eval "$(rbenv init -)"' >> $HOME/.profile
RUN echo 'eval "$(rbenv init -)"' >> $HOME/.bashrc
RUN rbenv install 2.1.5
RUN rbenv global 2.1.5
RUN gem install rails -v 4.0.11
ADD app.tar.gz /home/
WORKDIR /home/app
RUN bundle install
EXPOSE 3000
CMD ["rails", "server", "-b", "0.0.0.0"]
Run Code Online (Sandbox Code Playgroud)
泊坞窗,compose.yml
db:
image: mysql:latest
environment:
MYSQL_DATABASE: app_development
MYSQL_USER: mysql
DATABASE_PASSWORD: onetwo
ROOT_PASSWORD: onetwo
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
ports:
- "4000:3000"
links:
- db
Run Code Online (Sandbox Code Playgroud)
Tho*_*eil 71
db容器很可能无法启动.
通过仅启动db服务确保它正常工作.您可以使用以下命令执行此操作:
docker-compose up db
Run Code Online (Sandbox Code Playgroud)
如果在此命令之后看起来MySQL服务没有运行,那么您找到了问题的根源.
Mik*_*raf 36
与MySQL没有特别关系,但更多的是消息 ERROR: for <service> Cannot link to a non running container: /b2f21b869ccc_<dependency>_1 AS /<service>_1/<dependency>_1
我发现依赖容器的id与给定的id不同(b2f21b869ccc在上面的例子中)
简单地通过运行解决
docker-compose up -d --force-recreate <service>
这导致它重新创建依赖项并将链接修复为正确的docker id
Vil*_*ila 23
对我来说,它没有帮助运行docker-compose up db.
这对我有用:
sudo service docker restart
然后继续使用docker-compose up(-d)
您可以尝试使用docker网络的新功能.为此,您必须删除docker-compose.yml中的link参数,并使用以下命令初始化容器.--x-networking option
docker-compose --x-networking up -d
Run Code Online (Sandbox Code Playgroud)
为防止docker为容器生成随机名称,这些名称将添加到每个容器的相应网络的/ etc/hosts文件中,您可以使用docker-compose.yml中的container_name:密钥
db:
container_name: db
image: mysql:latest
environment:
MYSQL_DATABASE: app_development
MYSQL_USER: mysql
DATABASE_PASSWORD: onetwo
ROOT_PASSWORD: onetwo
web:
container_name: web
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
ports:
- "4000:3000"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
59899 次 |
| 最近记录: |