Docker无法链接到非运行容器
我需要用docker-compose创buildrails和mysql容器,当我尝试创build链接容器与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"]
泊坞窗,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
db
容器很可能无法启动。
确保它通过仅启动db
服务正常工作。 你可以用下面的命令来做到这一点:
docker-compose up db
如果出现这个命令后MySQL服务没有运行,那么你find了问题的根源。
与MySQL没有特别的关系,但更多的信息是ERROR: for <service> Cannot link to a non running container: /b2f21b869ccc_<dependency>_1 AS /<service>_1/<dependency>_1
我发现依赖容器有一个不同的id(我上面的例子中的b2f21b869ccc
)
只需运行docker-compose up -d --force-recreate <service>
导致它重新创build依赖关系,并修复了正确的docker id链接
对我来说,它并没有帮助运行docker-compose up db。
这为我做了诡计:
sudo service docker restart
然后继续使用docker-compose up(-d)
您可能会尝试dockernetworking的新function。为此,您必须删除docker-compose.yml中的链接参数,并使用-x --x-networking option
初始化容器。
docker-compose --x-networking up -d
为了防止docker生成容器的随机名,这些容器被添加到每个容器的相应networking的/ 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"
问题:
-
当
docker-compose
成功构build一组Images
,但是其中一个Images
无法运行(例如,启动到它自己的Container
)时,我得到了这个错误。 -
在这种情况下,我怀疑你的
puma_db_1
Container
的Image
无法run
。 你可以通过运行docker ps -a
来find这个Image
的名字。 这就是说,它的名字很可能是puma_db
解:
-
为了解决这个问题,你可以尝试
docker-compose up <service_name>
或者docker-compose up db
-
或者,通过运行
docker run <image_name>
find错误消息更有用。 在这种情况下,这将是docker run puma_db
对于mssql.link
,我有同样的问题,因为我不使用本地数据库(而是使用我们在分段中的那个),我只需要通过编辑Dockerfile脚本进行注释:
# DOCKER_ARGS="${DOCKER_ARGS} --link mssql-server-linux:mssql.link"
这个解决scheme可能会帮助别人,也可能是没有人,但它为我:)