【发布时间】:2015-04-15 22:48:17
【问题描述】:
我有一个简单的 dockerfile,类似于
FROM spotify/cassandra
RUN sed -i -e "s/^authenticator:.*/authenticator: PasswordAuthenticator/" $CASSANDRA_CONFIG/cassandra.yaml \
&& sed -i -e "s/^authorizer:.*/authorizer: org.apache.cassandra.auth.CassandraAuthorizer/" $CASSANDRA_CONFIG/cassandra.yaml
RUN cassandra \
&& sleep 10 && echo "Applying CQL scripts..." \
&& cqlsh -u cassandra -p cassandra -f someScript
&& pkill -f cassandra
如果我从构建命令执行所有操作
docker build --no-cache=true --rm=true .
我得到异常“AuthenticationException(为什么='用户名和/或密码不正确”
但是如果我使用最后一个命令创建图像并使用它启动它
docker run --rm -i -t --entrypoint=/bin/bash my-image
然后重复所有命令,我没有例外。
有什么区别?怎么可能,第二种方法有效,第一种方法无效?
我注意到在启动 cassandra 的第一种情况下不打印:
ERROR 22:39:03,081 Directory /var/lib/cassandra/data doesn't exist
ERROR 22:39:03,084 Directory /var/lib/cassandra/commitlog doesn't exist
ERROR 22:39:03,085 Directory /var/lib/cassandra/saved_caches doesn't exist
我可能只是猜测,由于 RUN 在单独的容器中运行命令,它不知何故看不到在 spotify/cassandra 中更改的某些文件...
spotify/cassandra repo 在这里:https://github.com/spotify/docker-cassandra
UPD。我想我明白了,这是因为在入口点脚本中修改了 spotify cassandra 配置文件,因此当我执行 RUN 命令时这些更改不可用。
【问题讨论】:
标签: linux bash docker dockerfile