首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么码头“-过滤ancestor=imageName”找到了错误的容器?

为什么码头“-过滤ancestor=imageName”找到了错误的容器?
EN

Stack Overflow用户
提问于 2016-05-16 13:36:31
回答 2查看 2.1K关注 0票数 1

我有一个部署脚本,它构建新的映像,停止具有相同映像名的现有容器,然后从这些映像启动新的容器。

我使用下面的答案:按图像名称停止码头集装箱- Ubuntu,按图像名称停止容器

但是,此命令将停止没有指定图像名称的容器。我做错了什么?

在这里看一下码头客停错了集装箱:

下面是dockerfile:

代码语言:javascript
复制
FROM ubuntu:14.04
MAINTAINER j@eka.com

# Settings
ENV NODE_VERSION    5.11.0
ENV NVM_DIR         /root/.nvm
ENV NODE_PATH       $NVM_DIR/versions/node/v$NODE_VERSION/lib/node_modules
ENV PATH           $NVM_DIR/versions/node/v$NODE_VERSION/bin:$PATH

# Replace shell with bash so we can source files
RUN rm /bin/sh && ln -s /bin/bash /bin/sh

# Install libs
RUN apt-get update
RUN apt-get install curl -y
RUN curl https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh | bash \
     && chmod +x $NVM_DIR/nvm.sh \
    && source $NVM_DIR/nvm.sh \
    && nvm install $NODE_VERSION \
    && nvm alias default $NODE_VERSION \
    && nvm use default
RUN apt-get clean

# Install app
RUN mkdir /app
COPY ./app /app

#Run the app
CMD ["node", "/app/src/app.js"]

我是这样建造的:

代码语言:javascript
复制
docker build -t "$serverImageName" .

开始是这样的:

代码语言:javascript
复制
docker run -d -p "3000:"3000" -e db_name="$db_name" -e db_username="$db_username"  -e db_password="$db_password"  -e db_host="$db_host" "$serverImageName"
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-17 13:34:15

根据医生们的说法,如果--filter ancestor在任何方面都是其他容器的子容器,它们可能会找到错误的容器。

因此,为了确保我的图像从一开始就是独立的,我将这一行添加到了我的dockerfile的开头,在from命令和维护者命令之后:

代码语言:javascript
复制
RUN echo DEVTESTLIVE: This line ensures that this container will never be confused as an ancestor of another environment

然后,在我的构建脚本中,将dockerfile复制到分发文件夹后,用适当的环境替换DEVTESTLIVE:

代码语言:javascript
复制
sed -i -e "s/DEVTESTLIVE/$env/g" ../dist/server/dockerfile

这似乎已经奏效了;我现在已经为所有三个环境同时运行了容器,并且可以通过它们的映像名自动启动和停止它们。

票数 0
EN

Stack Overflow用户

发布于 2017-02-14 16:43:58

为什么不使用容器名称来区分您的环境?

代码语言:javascript
复制
docker run -d --rm --name nginx-dev nginx
40ca9a6db09afd78e8e76e690898ed6ba2b656f777b84e7462f4af8cb4a0b17d
docker run -d --rm --name nginx-qa nginx
347b32c85547d845032cbfa67bbba64db8629798d862ed692972f999a5ff1b6b
docker run -d --rm --name nginx nginx
3bd84b6057b8d5480082939215fed304e65eeac474b2ca12acedeca525117c36

然后使用码头ps。

代码语言:javascript
复制
docker ps -f name=nginx$
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
3bd84b6057b8        nginx               "nginx -g 'daemon ..."   30 seconds ago      Up 28 seconds       80/tcp, 443/tcp     nginx
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37255264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档